以UTC计时的Android时间同步

问题描述:

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

为什么在客户端呢?为什么不直接在服务器上处理呢?那么,我的应用程序需要脱机工作。当连接到互联网不可用时,我的所有请求都被推入jobQueue。在这种情况下,我必须有原来的时间,其中用户所做的动作,所以如果我在4:02pm提交请求,但由于网络问题,服务器将只接收它周围7:30pm,服务器必须知道,我发送请求的4:02pm

现在我已考虑哪些选择?

  1. 在用户登录后,我将设备时间与服务器时间同步,并将该时间存储在本地。如果在用户登录时出现的任何用户的操作,我将有一个BroadcastReceiver收听到Date/Time操作的任何意图,然后存储偏移,这样每当用户提交的请求,我将计算时间同步与偏移确保时间戳准确无误。
  2. 有一台服务器同步API在后台完成,建立了我的应用程序内的服务与服务器时间同步持续向上,并寻找任何漂移,同时监听到任何用户操作。
  3. 使用推送通知并监听下游进行时间同步调整,同时还监听任何用户操作。
  4. 我也可以利用NTP服务器与我的设备同步时间。

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

P.S.如果我碰巧使用BroadcastReceiver来聆听设备上的任何日期时间操纵,那么我将如何计算该设备的偏移?

+0

使用移动应用程序的本地时区。 – koa73

它已经有一段时间,因为我问了这个问题,并没有发生过任何优雅的答案,问题,所以经过一番研究和一些试验和错误,我决定走NTP路线经过一番周围挖,我找到一个不错的图书馆,为你做整个事情。

它可以在这里找到:

NTP TRUE TIME

积分这些家伙谁取得了生活轻松了许多。

必须与NTP服务器只有一次,并从那里同步,他们会计算三角洲为我们给我们不管SystemClock时间精确UTC。

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

+0

认真吗?当我们处理UTC时,我甚至不认为时区是问题。 –

+0

我的意思是说,如果我们有服务器时区,这意味着我们可以通过使用时区获得服务器时间?即使没有网络 –

+0

所以你要说的是这样的: 'Calendar c = Calendar.getInstance(“TIME_ZONE”);'对吗?如果是这样,用户仍然可以在手机上操作时间。 –