我是新来的:)我在android(java)中开发一个小应用程序,我需要控制两个事件之间经过的秒数。
System.currentTimeMillis()的问题是设备的用户可以在第一个事件之后更改系统日期,因此当我在第二个事件之后获取System.currentTimeMillis()返回的值时,我在这两个值之间做了区别,这个获得的差异根本无效。
我尝试的另一个选项是System.nanoTime()。虽然用户更改了系统时间,但秒数仍然有效。但问题是,如果在第一个事件之后,用户关闭了设备,则第二个事件后System.nanoTime()返回的值无效,因为设备重启时,System.nanoTime()的计数器也是重启,因此,经过的时间再次无效。
是否有人知道计算两个事件之间的秒数的任何方法,考虑用户日期更改和用户重启设备?
提前致谢!
答案 0 :(得分:0)
由于您希望避免用户搞乱系统日期而引入的错误,因此您不能依赖该信息来源。使用NTP(网络时间协议)协议可以获得可靠的时间(并且准确,如果有的话)。请查看此问题以获取有关该问题的更多详细信息:Java NTP client。
您可以考虑的另一种方法是,您可以检查用户是否更改了系统时钟,而不是找到可靠的时钟来计算日期/时间差。一种简单的方法是存储时间戳并定期检查(每隔一秒),如果从系统时钟获得的新时间戳小于前一个时间戳。如果是这样,你可以采取行动。