2012-04-09 161 views
1

在我的應用程序中,我需要解析包含事件結束時間的JSON。當這個事件正在進行時,我需要計算剩下的時間來完成那個evet。要做到這一點我使用這段代碼:currentTimeMillis()不返回預期結果

// I get the time and convert it from millis to seconds 
long end = System.currentTimeMillis()/1000;      
techsTime.add((int) (queue.event.get("event0").endtime - end)); 

一旦我在幾秒鐘的時間,我將其轉換爲d,H,M,S。在Optimus Black和HTC Desire等設備中,這像一種魅力。但是今天我已經用朋友的ZTE Blade測試了我的應用程序,事件的剩餘時間非常奇怪。它出現在負數和距離原始數字非常遠的數字。我測試過不同值的應用程序,也沒有模式,它們就像隨機數,如:

擎天柱黑色 - >21米32S
中興刀片 - > -38m -57s

我已經認爲System.currentTimeMillis()在兩個設備中可能不同,但他們都使用CM7作爲操作系統。

回答

1

我認爲這個問題可能與其中一個設備noy的時鐘正確設置。隨着時間的推移,你給它看起來差不多是一個小時,這可能是錯誤的時鐘設置的原因。當你考慮時間設定時,也要看看時區。這可能是兩臺設備顯示同一時間,但其中一臺設備配置在不同的時區。

現代設備不會在網內同步它的時鐘會非常奇怪,但對於中興通訊來說仍然是可能的。

+0

問題是,我的應用程序幾乎在全球範圍內使用...我要檢查兩個設備的時區... – 2012-04-09 18:29:19

+0

你是righ!這是時區!現在的問題就是我之前說過的,我的應用程序在世界範圍內使用,這意味着不同的時區...也許檢查電話的時區並進行必要的操作?任何其他想法? – 2012-04-09 18:38:23

+0

沒有時區本身不是問題,因爲你計算絕對時間(自時代以來的時間)。如果您的某個設備無法正確計算此問題,則會發生此問題 – 2012-04-09 18:38:37

1

使用System.nanotime() - 它是專門爲了測量2個事件之間的時間而創建的。 System.currentTimeMillis()使用的系統時鐘不是不是每1毫秒更新一次,因此不可靠並給出不同的結果。

+0

我會試試看,我會告訴你一些東西! – 2012-04-09 18:27:50