2012-11-20 191 views
2

我想計算設備上最後一個事件與當前時間之間的時間差。但用戶可以通過設置系統時間來手動更改時間,因此與實際時間的差異可能會有所不同。有沒有辦法計算正確的時差?移動設備上的時間計算

回答

3

您可以使用這兩個時期之間System.nanoTime(),然後減去。與用戶更改設備時間時發生更改的System.currentTimeMillis()不同,System.nanoTime()不會受到影響。

以毫微秒爲單位返回最精確的可用系統計時器的當前值,即 。

此方法僅可用於測量經過時間及不 有關的系統或掛鐘時間任何其他概念。價值 返回代表納秒,因爲一些固定但任意時間 (也許在未來,所以值可能是負值)。這種方法 提供了納秒級精度,但不一定是納秒級 的準確度。沒有保證值的變化頻率。 跨度大於約 292年(263納秒)的連續調用之間的差異由於數值溢出而無法準確計算經過時間 。

1

試試這個

String time1 = "22:55:00"; 
String time2 = "23:05:00"; 
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
Date date1 = format.parse(time1); 
Date date2 = format.parse(time2); 
long difference = date2.getTime() - date1.getTime(); 
1

使用SystemClock.uptimeMillis()

我用下面的代碼在我的遊戲中實現接近恆定的FPS:

long now = SystemClock.uptimeMillis(), then = this.then, actualSleep; 
     actualSleep = DT - ((now < then) ? (Long.MAX_VALUE - then) + now : now - then); 
     Thread.sleep((actualSleep < 0) ? 0 : actualSleep);