2012-11-20 126 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);