当前位置:  开发笔记 > 编程语言 > 正文

如何计算java中事件的经过时间?

如何解决《如何计算java中事件的经过时间?》经验,为你挑选了5个好方法。

使用Java访问系统时钟的简单/简单方法是什么,以便我可以计算事件的已用时间?



1> Leigh..:

我会避免System.currentTimeMillis()用于测量经过的时间.currentTimeMillis()返回"挂钟"时间,这可能会改变(例如:夏令时,管理员用户更改时钟)并扭曲您的间隔测量值.

System.nanoTime()另一方面,返回自"某个参考点"以来的纳秒数(例如,JVM启动),因此不会受到系统时钟变化的影响.


我不认为夏令时会影响currentTimeMillis().它是根据UTC定义的.
在我对这个问题的另一个实例的回答中看到更多细节,这个实例以副本形式结束:http://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-爪哇/ 1776053#1776053

2> jjnguy..:

这是一些示例代码.

long startTime = System.currentTimeMillis();
// Run some code;
long stopTime = System.currentTimeMillis();

System.out.println("Elapsed time was " + (stopTime - startTime) + " miliseconds.");



3> Spencer Korm..:

Apache Commons-Lang还有适合您的目的的StopWatch类.它使用System.currentTimeMillis(),所以你仍然会有解决问题,但你可以暂停和做单圈时间等.我现在将它用作事件统计数据的标准.

http://commons.apache.org/lang/api-release/org/apache/commons/lang/time/StopWatch.html



4> Basil Bourqu..:

Leigh的回答是正确的.

java.time

Java 8及更高版本内置了java.time框架.

An Instant是UTC时间轴上的一个时刻,具有纳秒分辨率(最多9位小数秒).该now方法获取当前日期 - 时间时刻.

Instant now = Instant.now();

2016-03-12T04:29:39.123Z

您可以将一对Instant对象之间的经过时间计算为Duration.持续时间使用纳秒分辨率,最大值可以保持很长的秒数.这大于当前估计的宇宙年龄.

Duration duration = Duration.between( startInstant , stopInstant );

默认输出采用Duration::toString标准ISO 8601格式.您还可以要求总纳秒数(toNanos)或毫秒数(toMillis)以及其他数量.

Java 8

在Java 8中,获取当前时刻仅解析为毫秒分辨率(最多3位小数秒).因此,虽然java.time类可以存储纳秒,但它们只能用毫秒来确定当前时刻.此限制是由于遗留问题(默认Clock实现使用System.currentTimeMillis()).

Java 9

在Java 9及更高版本中,默认Clock实现可以确定高达纳秒分辨率的当前时刻.实际上这样做取决于计算机时钟硬件的精细程度.

有关更多信息,请参阅此OpenJDK问题页面:提高java.time.Clock.systemUTC()的实现精度

微基准

如果您的目的是基准测试,请务必查看其他问题,例如:

如何在Java中编写正确的微基准测试?

用java创建快速/可靠的基准测试?

框架可用于协助短期基准测试.



5> tvanfosson..:

java.lang.System.currentTimeMillis()或者java.lang.System.nanoTime()应该努力测量经过的时间.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有