UTC中的Android时间同步

时间:2016-11-28 07:33:43

标签: android datetime

我的应用程序严重依赖于当前的时间戳。目前,当用户提交请求时,我使用<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app ng-init="vm.init()" ng-controller="TestController as vm"> <input type="hidden" name="id" ng-model="id"> <input type="text" placeholder="just test input" name="other" ng-model="id"> </div>以UTC格式获取当前时间戳。虽然这样可以正常工作,但当用户开始在他们的设备上操作System.currentTimeMillis()并导致时间戳不准确时,它就成了一个问题。

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

我现在考虑了哪些选项?

  1. 用户登录后,我将设备时间与服务器时间同步,并在本地存储该时间。如果在用户登录时发生任何用户操作,我将4:02pm监听BroadcastReceiver操作的任何意图,然后存储偏移量,以便每当用户提交请求时,我将使用偏移量计算同步时间,以确保时间戳准确。
  2. 在后端完成服务器同步api,并在我的应用程序中设置服务,以便不断与服务器时间同步,并在监听任何用户操作的同时寻找任何漂移。
  3. 使用推送通知并收听下游进行时间同步调整,同时还可以监听任何用户操作。
  4. 我还可以使用Date/Time服务器与我的设备同步时间。
  5. 我不完全确定哪个是最优的(假设我列出了所有可能的解决方案)。如果我还没想到其他解决方案,请告诉我。

    P.S。如果我碰巧使用NTP来监听设备上的任何日期时间操作,我怎么能计算其中的偏移?

2 个答案:

答案 0 :(得分:2)

自从我提出这个问题已经有一段时间了,并且没有任何优雅的答案,所以经过一些研究和一些反复试验,我决定采取NTP路线,经过一些挖掘后,我发现一个漂亮的图书馆,为您完成整个事情。

可以在这里找到:

NTP TRUE TIME

对这些让生活变得更轻松的人的信任。

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

答案 1 :(得分:0)

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