【问题标题】:Android Time Synchronization in UTCUTC 中的 Android 时间同步
【发布时间】:2017-04-11 20:57:31
【问题描述】:

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

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

现在我考虑了哪些选项?

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

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

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

【问题讨论】:

  • 使用移动应用的本地时区。

标签: android datetime


【解决方案1】:

自从我问这个问题以来已经有一段时间了,并且没有任何优雅的答案来解决这个问题,所以经过一些研究和反复试验,我决定采用 NTP 路线,经过一番挖掘,我发现一个不错的库,可以为您完成所有工作。

可以在这里找到:

NTP TRUE TIME

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

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

【讨论】:

    【解决方案2】:

    对于时间同步,您可以像从服务器获取时区一样实现。一旦我们有了 timzone,我们就可以得到服务器的当前时间。

    【讨论】:

    • 认真的吗?当我们处理 UTC 时,我什至不认为时区是这里的问题......
    • 我的意思是如果我们有服务器时区,这意味着我们可以通过使用时区来获取服务器时间?即使没有网络
    • 所以你说要使用这样的东西:Calendar c = Calendar.getInstance("TIME_ZONE"); 对吗?如果是这样,用户仍然可以在手机上操纵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多