如何通过减去2个nanoTime对象获得有意义的结果?

我创建了一个监视请求长度的filter。

long start = System.nanoTime(); ... long end = System.nanoTime(); 

我怎么能从这里得到毫秒数?

 (end - start) / 1000000 

1微秒= 1000纳秒

1毫秒= 1000微秒

请注意,结果将向下舍入,但您通常无法获得真正的纳秒精度(精度取决于操作系统)。 来自nanoTime()上的Javadoc:

该方法提供纳秒精度,但不一定是纳秒精度。

另请注意,您可以使用TimeUnit类来帮助进行转换。 对于旧版本的Java,以下代码可能是将处理时间转换为其他时间格式的示例:

 long startTime = System.nanoTime(); //Processing in-between. long endTime = System.nanoTime(); long duration = endTime - startTime; duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS); 

请注意,较新版本的Java在TimeUnit类中具有快捷方式。

上面的样本会将纳秒变成几秒钟。 另请注意,这会截断它,因此您会失去一些精确度。 因此,如果切换到分钟,则会失去秒的精度。 如果您想获得“12分32秒”的结果,那么您将不得不使用此解决方案进行进一步处理。

只需减去它们并将结果除以10 ^ 6。

1纳秒是10 ^ -9秒,相应地,10 ^ -6毫秒。
http://en.wikipedia.org/wiki/Nano-

要获得有意义的结果:

 void procedure ( ... ) { ... } double measureProcedure ( double epsilon , ... ) { double mean ; double stderr = 2 * epsilon ; while ( stderr > epsilon ) { long start = System.nanoTime(); procedure ( ... ) ; long end = System.nanoTime(); // recalculate mean , stderr } return ( mean / 1000000 ) ; } 
 TimeUnit.NANOSECONDS.toMillis(end - start); 

就这样!

您可以使用System.currentTimeMillis()

警告:

请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大。 例如,许多操作系统以几十毫秒为单位测量时间。