移动设备上的时间计算

时间:2012-11-20 05:40:52

标签: android mobile time

我想计算设备上最后一个事件与当前事件之间的时差。但是用户总是可以通过设置系统时间来手动更改时间,因此差异可能与实时不同。有没有办法计算正确的时差?

3 个答案:

答案 0 :(得分:3)

您可以在两个句点之间使用System.nanoTime(),然后减去。与用户更改设备时间时更改的System.currentTimeMillis()不同,System.nanoTime()不会受到影响。

  

返回最精确的可用系统计时器的当前值,   以纳秒为单位。

     

此方法只能用于测量经过时间,而则不能   与任何其他系统概念或挂钟时间相关。价值   返回代表纳秒,因为某些固定但是任意时间   (也许在未来,所以价值观可能是负面的)。这种方法   提供纳秒级精度,但不一定是纳秒级   准确性。不保证值的变化频率。   连续调用的差异大于约   292年(263纳秒)将无法准确计算经过的时间   由于数字溢出。

答案 1 :(得分: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();

答案 2 :(得分: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);