Android - 获取当前时间,而不依赖于设备的时钟

Android - Get current time without dependency on device's clock

提问人:Aviv Ben Shabat 提问时间:11/17/2014 最后编辑:CommunityAviv Ben Shabat 更新时间:11/17/2014 访问量:5588

问:

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

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

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

Android 时间 系统时钟

评论

0赞 Aviv Ben Shabat 11/17/2014
编辑。希望它更好。

答:

8赞 Ridcully 11/17/2014 #1

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

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

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

评论

0赞 Aviv Ben Shabat 11/17/2014
如果这个时钟不是在每次设备关闭时都重置,那会很有帮助。我想我必须使用时间服务器。谢谢。
1赞 Ridcully 11/17/2014
别客气。也许你可以把它们结合起来。从计时器服务器获取一次时间(例如在启动后),然后从那时起将 elapsedRealtime() 添加到该初始值(减去获取 timerserver 值时的 elapsedRealtime 值。
4赞 zmarties 11/17/2014 #2

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

评论

0赞 Aviv Ben Shabat 11/17/2014
不幸的是,我无法使用另一个很好的答案,因为很难向用户解释此权限的必要性。谢谢