0

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

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

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

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

提前致谢!

4

1 回答 1

0

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

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

于 2016-03-26T21:23:50.857 回答