Android 时间同步(UTC)

rem*_*dy. 3 datetime android

我有一个严重依赖当前时间戳的应用程序。目前,当用户提交请求时,我使用 获取 UTC 中的当前时间戳System.currentTimeMillis()。虽然这工作得很好,但当用户开始Date/Time在设备上操作它们时就会出现问题,并会导致时间戳不准确。

那为什么要在客户端呢?为什么不在服务器上处理呢?嗯,我的应用程序需要离线工作。jobQueue当互联网连接不可用时,我的所有请求都会被推送。在这些情况下,我必须知道用户执行操作的原始时间,因此如果我在 提交请求4:02pm,但由于网络问题,服务器只会在 左右收到它7:30pm,服务器必须知道我在 发送请求4:02pm

现在我考虑了哪些选择?

  1. 用户登录后,我将设备时间与服务器时间同步并将该时间存储在本地。如果用户登录时发生任何用户操作,我将监听BroadcastReceiver任何操作意图Date/Time,然后存储偏移量,以便每当用户提交请求时,我都会使用偏移量计算同步时间,以确保时间戳是准确的。
  2. 在后端完成服务器同步 api,并在我的应用程序中设置一项服务,以持续与服务器时间同步并查找任何偏差,同时监听任何用户操作。
  3. 使用推送通知并监听下游的时间同步调整,同时监听任何用户操作。
  4. 我还可以利用NTP服务器与我的设备同步时间。

我不完全确定哪一个是最佳的(假设我已经列出了所有可能的解决方案)。如果还有其他我没有想到的解决方案,请告诉我。

PS 如果我碰巧使用 来BroadcastReceiver监听设备上的任何日期时间操作,我将如何计算其中的偏移量?

rem*_*dy. 6

自从我问这个问题以来已经有一段时间了,而且这个问题还没有任何优雅的答案,所以经过一些研究和一些尝试和错误,我决定采用 NTP 路线,经过一番挖掘后,我发现了一个不错的库这一切都会为你完成。

在这里能找到它:

NTP 真实时间

感谢这些让生活变得更加轻松的人。

您必须与 ntp 服务器同步一次,从那时起,它们将为我们计算 Delta,无论SystemClock时间如何,都为我们提供准确的 UTC。