java - 如何在 Java 中以 hh :mm:ss. SSS 格式格式化耗时间隔?

标签 java time simpledateformat

我正在做一个秒表,我使用 Java 的 SimpleDateFormat 将毫秒数转换为一个不错的“hh:mm:ss:SSS”格式。问题是小时字段中总是有一些随机数。这是我正在使用的代码:

public static String formatTime(long millis) {
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss.SSS");

    String strDate = sdf.format(millis);
    return strDate;
}

如果我取下 hh 部分,那么它工作正常。否则,即使传入的参数(毫秒数)为零,它也会在 hh 部分显示像“07”这样的随机内容。

不过,我对 SimpleDateFormat 类了解不多。感谢您的帮助。

最佳答案

最新的 JDK 内置了对您想要做的事情的支持,其中包含一个鲜为人知的名为 TimeUnit 的类。

你要使用的是java.util.concurrent.TimeUnit使用间隔

SimpleDateFormat 就像它听起来的那样,它格式化 java.util.Date 的实例,或者在你的情况下它转换 long 值到 java.util.Date 的上下文中,它不知道如何处理您显然正在使用的 intervals

您可以轻松做到这一点,而无需求助于 JodaTime 等外部库。

import java.util.concurrent.TimeUnit;

public class Main
{        
    private static String formatInterval(final long l)
    {
        final long hr = TimeUnit.MILLISECONDS.toHours(l);
        final long min = TimeUnit.MILLISECONDS.toMinutes(l - TimeUnit.HOURS.toMillis(hr));
        final long sec = TimeUnit.MILLISECONDS.toSeconds(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min));
        final long ms = TimeUnit.MILLISECONDS.toMillis(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min) - TimeUnit.SECONDS.toMillis(sec));
        return String.format("%02d:%02d:%02d.%03d", hr, min, sec, ms);
    }

    public static void main(final String[] args)
    {
        System.out.println(formatInterval(Long.parseLong(args[0])));
    }
}

输出将被格式化

13:00:00.000

关于java - 如何在 Java 中以 hh :mm:ss. SSS 格式格式化耗时间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6710094/

相关文章:

simpledateformat - Moto G2 Marshmallow 在转换日期格式时出现异常

java - 如何使用 ERA 将英文日期格式化为日文

java - 如何在所有过滤器之前运行 PhaseListener?

java - Spring - 属性 'name' 不允许出现在元素 'constructor-arg' 中

java - ADT 到 Android Studio 意外顶级异常

java - 用于性能指标存储的开源技术

java - 为什么第一个方法调用总是耗时最长?

ruby-on-rails - Rails 得到两个日期之间的差异

C程序打印当前时间

java - 如何使用 SimpleDateFormat 仅解析日期