为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2019-07-30 14:16:24
如何将毫秒转换为“hh:mm:ss”格式?我糊涂了。在绊倒这个线程之后,我试图弄清楚如何格式化具有该格式的倒数计时器hh:mm:ss。这是我的尝试 -//hh:mm:ssString.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:ssString.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))。
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

这种通用方法非常简单:

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


查看完整回答
反对 回复 2019-07-30
?
手掌心

TA贡献1942条经验 获得超3个赞

如果您使用的是apache commons:

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


查看完整回答
反对 回复 2019-07-30
?
FFIVE

TA贡献1797条经验 获得超6个赞

真的很亲密:

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 lineTimeUnit.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));

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


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 1323 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号