6

我注意到 System.currentTimeMillis() 时间取决于设备。如果我更改设备时钟上的时间,此方法将返回不同的答案。

例如:如果现在的实际时间是 10:00,并且我将设备上的时钟更改为 9:30,那么 System.currentTimeMillis() 将返回 9:30 的时间(以毫秒为单位……)。

我也试过这个答案和其他一些答案,但没有发现任何有用的东西。我应该声明我的应用程序主要是离线工作的。有没有办法在没有外部 API 的情况下获得真正的当前时间(与设备无关)?

4

2 回答 2

8

如果不是“离线”部分,我会建议使用时间服务器,但鉴于您的应用程序大部分时间都处于离线状态,这可能不是一个好的解决方案。

如果您不需要实际时间,而只需要一个不能弄乱的时间,您可以使用SystemClock.elapsedRealtime(),它为您提供自设备上次启动以来的时间。

您还可以结合时间服务器和 SystemClock.elapsedRealtime():从计时器服务器获取时间一次(例如,在启动后),然后将 elapsedRealtime() 添加到该初始值(减去获得 timerserver 值时的 elapsedRealtime 值) .

于 2014-11-17T09:37:43.830 回答
4

如果您使用 GPS 位置提供程序,getTime()将返回从 GPS 信号导出的 UTC 时间,而不是设备时间。GPS 位置提供程序可以离线工作 - 但与在线访问 A-GPS 信息相比,获得修复的速度要慢得多。

于 2014-11-17T09:44:26.940 回答