我想计算设备上最后一个事件与当前事件之间的时差。但是用户总是可以通过设置系统时间来手动更改时间,因此差异可能与实时不同。有没有办法计算正确的时差?
答案 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)
我使用以下代码在游戏中实现接近恒定的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);