2012-04-06 95 views
1

我想在更改計算機時鐘後在java應用程序中獲取時間。 這似乎沒有得到正確的時間。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發生......

+0

什麼操作系統? – jtahlborn 2012-04-06 18:08:09

+0

我在Windows 7上運行 – sworded 2012-04-06 18:17:40

+1

如果使用IDE重新啓動它。他們可能有兩個運行相同的jvm實例。 – Ahamed 2012-04-06 18:19:42

回答

0

您可以創建一個線程,時間可持續檢查X毫秒後的時間。如果時間偏移量大於+ -N應該大於+(因爲其他進程可能正在使用處理器,所以可能存在小錯誤),然後爲該時間創建一個偏移量。然後爲自己創建一個新的日期類並添加偏移量以獲得時間。

我不知道這是否是完全正確的,但在大多數的情況下

工作

編輯: 線程將記錄系統時鐘的時間,將進入睡眠狀態。

所以例如我們保持1秒的誤差raito爲10秒的線程睡眠時間

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

線程休眠10秒鐘

System clock = 10:00:11Recorded in Thread = 10:00:11Difference = 11offset=0作爲它在允許的極限內10 + - 1

線程睡10秒c和系統時鐘增加1小時

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

現在你需要減去這個偏移量,你會得到十時00分22秒不準確,但接近。

+2

「檢查時間」是什麼意思? – sworded 2012-04-06 18:20:59

+0

我看錯了問題,所以刪除帖子在這裏不合適 – 2012-04-06 19:01:45

0

或者你也可以讀取時間開展「日」這樣的

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