在 Java 中将秒数转换为 HH:MM(没有秒)

Convert number of seconds into HH:MM (without seconds) in Java

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

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

强烈 更喜欢指向效用函数(如果存在的话)的答案而不是一堆自制算法。

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

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

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

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.

现在我知道你会 "prefer" 实用方法,但你不太可能找到适合你 "every" 需要的东西,至少这给你一个起点。此外,您随时可以提出拉取请求 ;)

(当您使用 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.

中引入的

使用 Apache Commons Lang

您可以使用 Apache 著名实用程序库 Commons Lang 的实用程序 class 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 个方法调用。