更改计算机时钟后的Java系统时间

时间:2012-04-06 18:04:20

标签: java clock systemtime

我希望在更改计算机时钟后在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 ...

2 个答案:

答案 0 :(得分:0)

您可以创建一个连续检查X ms后的时间的线程。如果时间偏移量大于+ -N而不是它应该是的(考虑到其他进程可能正在使用处理器,那么可能存在很小的误差)然后创建一个时间偏移量。然后为自己创建一个新的日期类,并添加偏移量以获得时间。

我不知道它是否完全准确,但在大多数情况下都可以使用

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

所以例如我们保持1秒的错误raito为线程休眠时间10秒

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

线程休眠10秒

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

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

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

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

答案 1 :(得分:0)

或者您可以阅读启动“日期”的时间

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