我注意到System.currentTimeMillis()时间与设备有关。如果我更改设备时钟的时间,此方法将返回不同的答案。
例如:如果现在的实时时间是10:00,并且我将设备上的时钟更改为9:30,则System.currentTimeMillis()将返回9:30时间(以毫秒为单位)。
我也尝试了this answer和其他一些答案,但没有找到任何有用的东西。
我应该声明我的应用程序主要是脱机工作。
有没有办法在没有外部API的情况下获得实际当前时间(设备无关)?
答案 0 :(得分:8)
如果不适合离线'另外,我建议使用时间服务器,但考虑到您的应用程序大部分时间都处于脱机状态,这可能不是一个好的解决方案。
如果您不需要实际时间,但只需要一段无法搞砸的时间,您可以使用SystemClock.elapsedRealtime()来获取自设备上次启动以来的时间。
您还可以组合时间服务器和SystemClock.elapsedRealtime():从计时器服务器获取一次(例如,在启动之后),然后从那时起将elapsedRealtime()添加到该初始值(减去获得时间的elapsedRealtime值) timerserver value)。
答案 1 :(得分:4)
如果您使用GPS位置提供商,getTime()
将返回从GPS信号中获得的UTC时间,而不是设备时间。 GPS位置提供商可以脱机工作 - 但与在线时可以访问A-GPS信息相比,获得修复的速度要慢得多。