我知道您可以使用DateUtils.formatElapsedTime(seconds)
将数秒转换为格式为String
的{{1}}。但有没有任何实用功能可以让我执行相同的转换,但没有秒?
例如,我想将HH:MM:SS
秒转换为3665
,即使它恰好是1:01
。换句话说,只需删除秒部分。
强烈会更喜欢指向效用函数(如果存在)的答案而不是一堆本地滚动算法。
答案 0 :(得分:3)
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
Java 9中引入了toMinutesPart
方法和其他toXxxPart
方法。
答案 1 :(得分:2)
根据可用信息,您似乎想要格式化基于持续时间的值。幸运的是,自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
。
现在我知道你“更喜欢”实用工具方法,但你不太可能找到适合你“每个”需求的东西,这至少给你一个起点。此外,你总是可以提出拉动请求;)
答案 2 :(得分:2)
您可以使用Apache着名的实用程序库DateFormatUtils
的实用程序类Commons Lang,并结合TimeUnit将秒转换为毫秒:
def m1(s: AnyRef): Unit
使用输入static String format(long durationSeconds) {
long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds);
// Commons lang:
return DurationFormatUtils.formatDuration(durationMillis, "HH:mm");
}
打印:
01:01
就我个人而言,我更喜欢使用Java8或Java9标准库(参见其他答案),而不是仅仅为了使它成为1方法调用而引入依赖。