java hh mm ss 毫秒_如何将毫秒转换为“hh:mm:ss”格式?

问题

我很困惑。在遇到this线程后,我试图弄清楚如何格式化具有formathh:mm:ss的倒数计时器。

这是我的尝试 -

//hh:mm:ss

String.format("%02d:%02d:%02d",

TimeUnit.MILLISECONDS.toHours(millis),

TimeUnit.MILLISECONDS.toMinutes(millis) -

TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),

TimeUnit.MILLISECONDS.toSeconds(millis) -

TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

所以,当我尝试像3600000ms这样的值时,我得到01:59:00,这是错的,因为它应该是01:00:00。显然我的逻辑有问题,但此刻,我看不出它是什么!

有人可以帮忙吗?

**编辑 - **

修复。这是将毫秒格式化为hh:mm:ss格式的正确方法 -

//hh:mm:ss

String.format("%02d:%02d:%02d",

TimeUnit.MILLISECONDS.toHours(millis),

TimeUnit.MILLISECONDS.toMinutes(millis) -

TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),

TimeUnit.MILLISECONDS.toSeconds(millis) -

TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));

问题是这个TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))。应该是这个TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))。

#1 热门回答(269 赞)

你真的闭嘴了:

String.format("%02d:%02d:%02d",

TimeUnit.MILLISECONDS.toHours(millis),

TimeUnit.MILLISECONDS.toMinutes(millis) -

TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), // The change is in this line

TimeUnit.MILLISECONDS.toSeconds(millis) -

TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

你用几分钟时间将小时数转换为毫秒数。

顺便说一句,我喜欢你使用的TimeUnitAPI :)

这是一些测试代码:

public static void main(String[] args) throws ParseException {

long millis = 3600000;

String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),

TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),

TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

System.out.println(hms);

}

输出:

01:00:00

我意识到通过使用模数除法而不是减法可以大大简化上面的代码:

String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),

TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1),

TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));

仍然使用TimeUnitAPI获取所有魔术值,并提供完全相同的输出。

#2 热门回答(56 赞)

这种通用方法非常简单:

public static String convertSecondsToHMmSs(long seconds) {

long s = seconds % 60;

long m = (seconds / 60) % 60;

long h = (seconds / (60 * 60)) % 24;

return String.format("%d:%02d:%02d", h,m,s);

}

#3 热门回答(44 赞)

如果你使用的是apache commons:

DurationFormatUtils.formatDuration(timeInMS, "HH:mm:ss,SSS");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值