Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改计算机时钟后的Java系统时间_Java_Clock_Systemtime - Fatal编程技术网

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

更改计算机时钟后的Java系统时间,java,clock,systemtime,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;

我想在更改计算机时钟后在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中…

您可以创建一个线程,在X ms后继续检查时间。如果时间偏移大于+-N(将其视为其他进程可能正在使用处理器,因此可能存在小错误),则创建时间偏移。然后为自己创建一个新的日期类,并添加偏移量以获取时间

我不知道它是否完全准确,但它在大多数情况下都会起作用

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

例如,我们将错误raito保持为1秒,线程睡眠时间保持为10秒

系统时钟=10:00:00
记录在线程=10:00:00
差异=null

线程休眠10秒

系统时钟=10:00:11
记录在线程=10:00:11
差异=11
偏移=0
,因为它在允许的限制10+-1之内

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

<代码>系统时钟=11:00:21和
记录在线程中=11:00:21
Difference=3600
offset=3599


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

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

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

如果您正在使用IDE,请重新启动它。它们在运行时可能具有相同的jvm实例。我不想重新启动IDE。无法在使用Java7的Win7 x64上的eclipse中重现此行为。发布SSCCE-这显然不是预期的行为,因为
new Date()
应该使用系统时间,与nanoTime相反,nanoTime并不保证单调性。我正在运行Java 1.6.0.30。Java7解决了这个问题吗?发布一个,我们可以检查一下。date API似乎不太可能有这样一个奇怪的错误。你说的“检查时间”是什么意思?我看错了问题,所以要删除帖子在这里是不合适的