【问题标题】:Convert number of seconds into HH:MM (without seconds) in Java在 Java 中将秒数转换为 HH:MM(无秒)
【发布时间】:2018-10-10 06:53:51
【问题描述】:

我知道您可以使用DateUtils.formatElapsedTime(seconds) 将秒数转换为String,格式为HH:MM:SS。但是是否有任何实用功能可以让我执行相同的转换但无需秒?

例如,我想将3665 秒转换为1:01,即使它恰好是1:01:05。换句话说,只是去掉秒部分。

强烈会更喜欢指向实用函数(如果存在)而不是一堆家庭滚动算法的答案。

【问题讨论】:

标签: java datetime time datetime-format java-time


【解决方案1】:

使用 Apache Commons Lang

您可以使用 Apache 著名的实用程序库 Commons Lang 的实用程序类 DateFormatUtils,结合 TimeUnit 将秒转换为毫秒:

static String format(long durationSeconds) {
    long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds);
    // Commons lang:
    return DurationFormatUtils.formatDuration(durationMillis, "HH:mm");
}

与输入 3665 一起打印:

01:01

我个人更喜欢使用 Java8 或 Java9 标准库(请参阅其他答案),而不是仅仅为了使其成为 1 个方法调用而引入依赖项。

【讨论】:

  • 有道理,Ole,相应地改变了答案。
【解决方案2】:

MadProgrammer has already provided a good Java 8 answer(当您使用 ThreeTen Backport 时,它也适用于 Java 6 和 7)。在 Java 9 中,仍然可以在库中完成更多计算:

    int seconds = 3665;
    Duration dur = Duration.ofSeconds(seconds);
    String formatted = String.format("%d:%02d", dur.toHours(), dur.toMinutesPart());
    System.out.println(formatted);

输出:

1:01

toMinutesPart 方法和其他 toXxxPart 方法是在 Java 9 中引入的。

【讨论】:

    【解决方案3】:

    根据可用信息,您似乎想要格式化基于持续时间的值。幸运的是,从 Java 8 开始,现在有了一个新的 java.time API,其中包括一个 Duration 类。

    不幸的是,它不(至少最后一次检查)不支持它的格式化程序。

    但是,您可以轻松滚动自己的...

    protected static String format(Duration duration) {
        long hours = duration.toHours();
        long mins = duration.minusHours(hours).toMinutes();
        return String.format("%02d:%02d", hours, mins);
    }
    

    当与...类似的东西一起使用时

    System.out.println(format(Duration.ofSeconds(3665)));
    

    打印出01:01

    现在我知道您会“更喜欢” 实用程序方法,但您不太可能找到适合您“所有”需求的东西,这至少为您提供了一个起点。此外,您可以随时提出拉取请求;)

    【讨论】:

    • 这里没有一堆家庭滚动算法。计算在库中进行。我同意这是有利的。
    • 这很棒,尤其是使用String.format() 来格式化输出。我在搜索时找到的答案大多只是整数除法、模数和连接字符串,导致前导零丢失。这就是我所说的“家庭滚动算法”。
    • @BadCash 哦,亲爱的上帝,不 - 如果有一件事会引起我的反对 - 它是日期/时间算术 - 没有任何借口,尤其是这些天
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2017-10-22
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多