如何从系统时间独立获得时间增量?

时间:2011-08-23 13:46:08

标签: java time

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

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

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

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

4 个答案:

答案 0 :(得分:10)

使用:

System.nanoTime()

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

答案 1 :(得分:4)

System.nanoTime();

来自Javadoc

  

此方法只能用于测量经过时间,与系统或挂钟时间的任何其他概念无关。

答案 2 :(得分:1)

使用时间网络服务。例如thisthisthis

答案 3 :(得分:0)

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

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

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

HTH