2016-03-26 77 views
0

我在這裏是新的:)我正在開發一個小型應用程序在android(java),我需要的東西來控制兩個事件之間流逝的秒。在java中可靠的「秒計數器」

System.currentTimeMillis()的問題是設備的用戶可以在第一個事件之後更改他的系統日期,所以當我在第二個事件之後獲取由System.currentTimeMillis()返回的值時,並且我將這兩個值區分開來,這樣得到的差異根本無效。

我試過的另一個選項是System.nanoTime()。雖然用戶更改他的系統時間,但秒數是有效的。但問題是,如果在第一個事件之後,用戶關閉設備,第二個事件之後由System.nanoTime()返回的值無效,因爲在設備重新啓動時,System.nanoTime()的計數器也是重新啓動,因此,經過的時間再次無效。

有沒有人知道任何方法來計算兩個事件之間的秒數,考慮用戶日期更改和用戶重新啓動設備?

在此先感謝!

+0

退房http://stackoverflow.com/questions/4442192/how-to-use-an-internet-time-server-to-get-the-time – elhefe

+0

@Reb這已經解決了很多次堆棧溢出。發佈前請徹底搜索。 –

+0

也是[this]的一個副本(http://stackoverflow.com/q/32194245/642706)。和[這](http://stackoverflow.com/q/33449737/642706)。和[這](http://stackoverflow.com/q/31222397/642706)。 –

回答

0

由於您希望避免用戶搞亂系統日期時可能引入的錯誤,因此您無法依賴該源獲取信息。使用NTP(網絡時間協議)協議可以獲得可靠的時間(以及準確的事情)。看看這個問題的更多細節:Java NTP client

您可能會考慮的另一種方法是,不是找到可靠的時鐘來計算日期/時間差,而是可以檢查用戶是否更改了系統時鐘。如果從系統時鐘獲得的新時間戳較小(之前),則一個簡單的方法是存儲時間戳並定期檢查(每隔一秒)。如果是這樣,你可以採取行動。