关于java:如何从系统时间独立获取时间delta?

How to get time delta independently from system time?

我正在用Java编写一个简单的计时器。 它有"开始"和"停止"按钮,以及显示自计时器启动以来经过了多长时间的文本视图。

它是通过设置System.currentTimeMillis()的初始时间并在循环中每秒更新当前值来实现的。

问题是如果我在计时器运行时更改系统时间,整个测量将失败。 例如,如果我将时间设定为一个月,则计时器显示负值,因为currentTimeMillis()现在返回的值小于初始值。

那么,我如何计算与系统时间无关的时间增量? 使这个解决方案跨平台也很棒。


使用:

1
System.nanoTime()

这应该做到这一点。 它不会考虑系统时间,只能用于测量经过的时间。 这是你想要的。 您需要除以100万才能获得经过的毫秒数。 另见Javadocs。


1
System.nanoTime();

来自Javadoc:

This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time.


使用时间Web服务。 例如这个或这个或这个


你可以像NTP一样安装恶魔,任何方向的系统时间跳跃都有很多问题,并且可能导致很多其他问题。

System.nanoTime()不一定取决于系统时钟 - 但它可以 - 只是确保系统时间正确进行。
修改系统时间是一项特权操作,因此有人会这样做,他们会更好地了解。

以下是关于同一案例的13岁的错误:http://bugs.sun.com/view_bug.do?bad_id = 4290274

HTH