将hh:mm:ss转换为mmm:ss

时间:2018-01-19 18:12:39

标签: java date timeunit

我有一个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));
}

我的客户希望在没有“小时”标签的情况下显示此天文台表。例如:

  1. if 100 hours => 6000:00
  2. if 0 hours and 50 minutes => 50:00
  3. if 1 hour and 12 minutes and 30 seconds => 72:30
  4. if 10 hours and 5 minutes => 600:05
  5. if 0 hours, 0 minutes and 0 seconds => 00:00
  6. 我应该如何更改方法?

4 个答案:

答案 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));
}