【发布时间】:2017-04-11 20:57:31
【问题描述】:
我有一个严重依赖当前时间戳的应用程序。目前,当用户提交请求时,我使用System.currentTimeMillis() 获取 UTC 中的当前时间戳。虽然这很好用,但当用户开始在他们的设备上操作他们的Date/Time 并导致时间戳不准确时,就会出现问题。
那为什么要在客户端呢?为什么不在服务器上处理呢?好吧,我的应用程序需要离线工作。当无法连接到 Internet 时,我的所有请求都会被推送到 jobQueue。在这些情况下,我必须知道用户执行操作的原始时间,所以如果我在4:02pm 提交请求,但由于网络问题,服务器只会在7:30pm 附近收到它,服务器必须知道我发送了请求4:02pm。
现在我考虑了哪些选项?
- 用户登录后,我将设备时间与服务器时间同步,并将该时间存储在本地。如果在用户登录时发生任何用户操作,我将有一个
BroadcastReceiver监听Date/Time操作的任何意图,然后存储偏移量,以便每当用户提交请求时,我都会计算同步时间使用偏移量以确保时间戳准确。 - 在后端完成一个服务器同步 api,并在我的应用程序中设置一个服务,以持续与服务器时间同步,并在侦听任何用户操作的同时寻找任何偏差。
- 使用推送通知并在下游监听时间同步调整,同时监听任何用户操作。
- 我还可以利用
NTP服务器与我的设备同步时间。
我不完全确定哪个是最优化的(假设我已经列出了所有可能的解决方案)。如果还有其他我没有想到的解决方案,请告诉我。
附:如果我碰巧使用BroadcastReceiver 监听设备上的任何日期时间操作,我将如何计算其中的偏移量?
【问题讨论】:
-
使用移动应用的本地时区。