【问题标题】:Java System Time after changing computer clock更改计算机时钟后的 Java 系统时间
【发布时间】:2012-04-06 18:04:20
【问题描述】:

我想在更改计算机时钟后在 java 应用程序中获取时间。 这似乎没有得到正确的时间。

例如

Computer clock reads 1:30pm; new Date() returns 1:30pm
Change computer clock to 12:30pm;
Computer clock reads 12:30pm; new Date() returns 12:30pm
Change computer clock to 1:30pm;
Computer clock reads 1:30pm; new Date() returns 12:30pm

我的 java 应用程序是否可以检测到时钟的这种变化?

更新:似乎只发生在 Chrome...

【问题讨论】:

  • 如果您使用的是 IDE,请重新启动它。他们可能有相同的 jvm 实例来运行。
  • 我不想重新启动我的 IDE。
  • 无法在带有 Java7 的 Win7 x64 上的 eclipse 中重现此行为。发布 SSCCE - 这显然不是预期的行为,因为 new Date() 应该使用系统时间,而与 nanoTime 相反,它不能保证单调性。
  • 我正在运行 Java 1.6.0.30。 Java 7 是否解决了这个问题?
  • 发布SSCCE,我们可以查看。虽然日期 API 似乎不太可能有这么奇怪的错误。

标签: java clock systemtime


【解决方案1】:

您可以创建一个线程来持续检查 X 毫秒后的时间。如果时间偏移大于 +-N 比它应该是的(认为这是因为其他进程可能正在使用处理器,所以可能存在小错误)然后为时间创建一个偏移量。然后自己新建一个日期类,加上偏移量就可以得到时间了。

我不知道它是否完全准确,但它适用于大多数情况

编辑: 线程会记录系统时钟的时间并进入休眠状态。

例如,对于 10 秒的线程睡眠时间,我们保持 1 秒的错误率

System clock = 10:00:00Recorded in Thread = 10:00:00Difference = null

线程休眠 10 秒

System clock = 10:00:11Recorded in Thread = 10:00:11Difference = 11 offset=0 因为它在允许的范围内 10 +- 1

线程休眠 10 秒,系统时钟增加 1 小时

System clock = 11:00:21Recorded in Thread = 11:00:21Difference = 3600 offset = 3599

现在你需要减去这个偏移量,你会得到 10:00:22 不准确但接近。

【讨论】:

  • “查看时间”是什么意思?
  • 我读错了问题,所以删除了这里不合适的帖子
【解决方案2】:

或者您可以读取启动“日期”的时间,像这样

Runtime.exec("date").getInputStream() ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2013-04-05
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多