首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将hh:mm:ss转换为mmm:ss

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

Stack Overflow用户
提问于 2018-01-19 18:12:38
回答 4查看 436关注 0票数 1

我有一个Java函数,它将秒转换成特定的格式(hh:mm:ss):

代码语言:javascript
复制
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. 如果是100 hours => 6000:00
  2. 如果是0 hours and 50 minutes => 50:00
  3. 如果是1 hour and 12 minutes and 30 seconds => 72:30
  4. 如果是10 hours and 5 minutes => 600:05
  5. 如果是0 hours, 0 minutes and 0 seconds => 00:00

我该如何改变我的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-19 18:36:40

对于灵活的分钟数,您必须使用%d而不是指定需要多少位数的%02d,您的解决方案应该如下所示:

代码语言:javascript
复制
return String.format("%d:%02d",
        TimeUnit.SECONDS.toMinutes(seconds),
        TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1)
);

示例

代码语言:javascript
复制
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));
}

输出

代码语言:javascript
复制
360000 : 6000:00
3000   : 50:00
4350   : 72:30
36300  : 605:00
0      : 0:00
票数 3
EN

Stack Overflow用户

发布于 2018-01-19 18:17:28

把时间都扔了吧。

代码语言:javascript
复制
return String.format("%04d:%02d",
    TimeUnit.SECONDS.toMinutes(seconds),
    TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
票数 3
EN

Stack Overflow用户

发布于 2018-01-19 21:05:19

代码语言:javascript
复制
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类来建模它。这是最正确的做法。一些人使用了关于编写代码的自文档化这个词,考虑到了这一点。

Duration.toSecondsPart方法仅在Java9中引入。如果您使用的是Java 8(或Java 6或7和ThreeTen Backport),则通过减去分钟并转换为秒来获得秒部分:

代码语言:javascript
复制
    long minutes = dur.toMinutes();
    dur = dur.minusMinutes(minutes);
    return String.format("%02d:%02d", minutes, dur.toSeconds());

结果是一样的。

如果您的秒表示的是一天中的某个时间,则正确的自文档化解决方案将是使用LocalTime类:

代码语言:javascript
复制
    LocalTime chrono = LocalTime.ofSecondOfDay(seconds);
    return String.format("%02d:%02d",
            chrono.get(ChronoField.MINUTE_OF_DAY), chrono.getSecond());

这将拒绝大于86399的秒值,但会出现异常,因为一天中的时间不能是24:00或更大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48347169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档