在Java中将秒数转换为HH:MM(无秒)
我知道您可以使用DateUtils.formatElapsedTime(seconds)
将数秒转换为格式为HH:MM:SS
的String
。 但有没有任何实用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方法调用而引入依赖。