格式化Java';s纳米时间

格式化Java';s纳米时间,java,format,Java,Format,我正在用Java记录某个东西需要多长时间。为此,我正在运行: long startTime = System.nanoTime(); ... long duration = System.nanoTime() - startTime; 现在,我想获取持续时间并以mm:ss.SSS的格式打印出来。在Java中如何实现这一点?只需将其转换为毫秒: import java.util.concurrent.TimeUnit; ... long duration_ms = TimeUnit.NANOSE

我正在用Java记录某个东西需要多长时间。为此,我正在运行:

long startTime = System.nanoTime();
...
long duration = System.nanoTime() - startTime;
现在,我想获取持续时间并以
mm:ss.SSS
的格式打印出来。在Java中如何实现这一点?

只需将其转换为毫秒:

import java.util.concurrent.TimeUnit;
...
long duration_ms = TimeUnit.NANOSECONDS.toMilliseconds( duration )
然后DateFormat将按预期工作


经过进一步思考,我的回答是不正确的。问题是System.currentTimeMillis()(和DateFormat)需要从历元开始的毫秒数。上面的转换方法将持续时间转换为毫秒,这样,如果从epoch开始有一个以纳秒和毫秒为单位的初始值,那么您可以将其与一些数学一起使用,但是System.nanoTime()没有定义为与任何特定内容相关。

如果您只关心mm:ss.SSS,为什么要使用
nanoTime()
?使用,它具有与
java.util.Date
@jarnbjo So的内置接口?两者都用于测量时间,1百万=10^6纳米。如果他只需要小数点后3位小数,毫秒就足够了。无论如何,纳米精度都会丢失。@jarnbjo从技术上讲,时间戳只不过是从新纪元开始的持续时间。
Date
对象以毫秒为单位测量此持续时间。不管怎么说,我建议它作为一种人类可读的格式(这就是问题所在)@LuiggiMendoza是的,它更准确。但是,问题要求的格式将失去全部准确性;对于哪一毫秒是足够的。@blgt:您实际编写的是,如果您从一个时间戳(历元的开始)开始并添加一个持续时间,您将获得另一个时间戳。到目前为止,这是正确的。然而,这并不意味着持续时间和时间戳是相同的。用
DateFormat
测试了这一点,但不起作用。是的,你是对的。我用这个问题修正了我的答案。