java中可靠的“秒计数器”

时间:2016-03-26 21:13:02

标签: java counter seconds elapsedtime

我是新来的:)我在android(java)中开发一个小应用程序,我需要控制两个事件之间经过的秒数。

System.currentTimeMillis()的问题是设备的用户可以在第一个事件之后更改系统日期,因此当我在第二个事件之后获取System.currentTimeMillis()返回的值时,我在这两个值之间做了区别,这个获得的差异根本无效。

我尝试的另一个选项是System.nanoTime()。虽然用户更改了系统时间,但秒数仍然有效。但问题是,如果在第一个事件之后,用户关闭了设备,则第二个事件后System.nanoTime()返回的值无效,因为设备重启时,System.nanoTime()的计数器也是重启,因此,经过的时间再次无效。

是否有人知道计算两个事件之间的秒数的任何方法,考虑用户日期更改和用户重启设备?

提前致谢!

1 个答案:

答案 0 :(得分:0)

由于您希望避免用户搞乱系统日期而引入的错误,因此您不能依赖该信息来源。使用NTP(网络时间协议)协议可以获得可靠的时间(并且准确,如果有的话)。请查看此问题以获取有关该问题的更多详细信息:Java NTP client

您可以考虑的另一种方法是,您可以检查用户是否更改了系统时钟,而不是找到可靠的时钟来计算日期/时间差。一种简单的方法是存储时间戳并定期检查(每隔一秒),如果从系统时钟获得的新时间戳小于前一个时间戳。如果是这样,你可以采取行动。

相关问题