我有一个Java函数,可以将秒转换为特定格式(hh:mm:ss):
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d:%02d", TimeUnit.SECONDS.toHours(seconds),
TimeUnit.SECONDS.toMinutes(seconds) % TimeUnit.HOURS.toMinutes(1),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}
我的客户希望在没有“小时”标签的情况下显示此天文台表。例如:
100 hours => 6000:00
0 hours and 50 minutes => 50:00
1 hour and 12 minutes and 30 seconds => 72:30
10 hours and 5 minutes => 600:05
0 hours, 0 minutes and 0 seconds => 00:00
我应该如何更改方法?
答案 0 :(得分:3)
只是放弃了几个小时。
return String.format("%04d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
答案 1 :(得分:3)
对于灵活的分钟数,您必须使用%d
代替%02d
来指定您想要的数字,您的解决方案应如下所示:
return String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1)
);
示例强>
long[] times = {360000, 3000, 4350, 36300, 0};
for (long time : times) {
String result = String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(time),
TimeUnit.SECONDS.toSeconds(time) % TimeUnit.MINUTES.toSeconds(1));
System.out.println(String.format("%d : %s", time, result));
}
<强>输出强>
360000 : 6000:00
3000 : 50:00
4350 : 72:30
36300 : 605:00
0 : 0:00
答案 2 :(得分:2)
public static String formatChronometer(long seconds) {
Duration dur = Duration.ofSeconds(seconds);
return String.format("%02d:%02d", dur.toMinutes(), dur.toSecondsPart());
}
当我向此方法提供36005
时,它返回600:05
。
我认为你的计时秒表示持续时间,一段时间。要么是经过的时间,要么是要倒数的值。不是一天中的某个时间(你提到100小时的例子,但一天中的时间从不是100小时)。在那种情况下,我会清楚地使用Duration
类来对其进行建模。这是最正确的事情。有些人使用自我记录这个词来记录为此而考虑的代码。
{J}仅在Java 9中引入Duration.toSecondsPart
方法。如果您使用的是Java 8(或带有ThreeTen Backport的Java 6或7),请通过减去分钟然后转换为秒来获取秒部分: / p>
long minutes = dur.toMinutes();
dur = dur.minusMinutes(minutes);
return String.format("%02d:%02d", minutes, dur.toSeconds());
然后结果是一样的。
PS如果你的秒数代表一个时间,那么正确且自我记录的解决方案就是使用LocalTime
类:
LocalTime chrono = LocalTime.ofSecondOfDay(seconds);
return String.format("%02d:%02d",
chrono.get(ChronoField.MINUTE_OF_DAY), chrono.getSecond());
这会拒绝大于86399
的秒值,但会有例外,因为时间不能为24:00
或更高。
答案 3 :(得分:0)
从格式
中删除hours
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}