【问题标题】:How to get time delta independently from system time?如何独立于系统时间获取时间增量?
【发布时间】:2011-08-23 13:46:07
【问题描述】:

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

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

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

那么,我如何计算独立于系统时间的时间增量?让这个解决方案跨平台也很棒。

【问题讨论】:

  • 请贴出您尝试过的代码。

标签: java time


【解决方案1】:

用途:

System.nanoTime()

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

【讨论】:

【解决方案2】:
System.nanoTime();

来自Javadoc

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

【讨论】:

  • 这并不意味着 nanoTime 与系统时钟没有关联。
【解决方案3】:

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

【讨论】:

  • 唯一的问题是您必须处理网络延迟,但对于处理此类问题是一个很好的解决方案
【解决方案4】:

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

System.nanoTime() 不一定取决于系统时钟 - 但它可以 - 只需确保系统时间正确进行即可。 修改系统时间是一项特权操作,所以有人这样做他们应该会更清楚。

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

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多