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

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

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

强烈倾向于指向效用函数(如果存在)的答案而不是一堆本地滚动算法。

根据可用信息,您似乎希望格式化基于持续时间的值。 幸运的是,从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打印出来。

现在我知道你“更喜欢”实用方法,但是你不太可能找到适合你“每个”需求的东西,这至少给你一个起点。 此外,你总是可以提出拉动请求;)

MadProgrammer已经提供了一个很好的Java 8答案 (当你使用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

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

使用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方法调用而引入依赖。