【问题标题】:How to handle local time zone change when syncing data to server?将数据同步到服务器时如何处理本地时区更改?
【发布时间】:2019-12-17 05:32:24
【问题描述】:

我有一个安卓应用。应用程序执行一些任务并使用时间戳更新本地数据库中这些任务的状态。假设用户记录了一个事件。因此,带有 event_name 和 time_stamp 的条目被添加到事件表中。对于时间戳,我以毫秒为单位获取当前时间,将其转换为 UTC 时间并保存在数据库中。

val cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"))
val t = cal.time.time

应用程序正在运行同步服务。该服务基本上维护一个时间戳,该时间戳表示上次同步的时间。服务迭代数据库中的所有表,找到时间戳大于服务维护的时间戳的记录,并将这些记录同步到服务器。响应同步的服务器以 UTC 格式返回其当前时间,以在客户端应用程序上同步服务。客户端应用程序将其时间戳值更新为服务器提供的值。

但问题是当用户更改他们当前的本地时间/时区时。在这种情况下,我在本地获得的 UTC 时间是不合适的。 因此,每当在本地数据库中记录某些事件时,都会使用错误的时间戳记录。 因此,当同步服务开始迭代所有表时,它不会找到自上次同步以来用户修改的正确记录。

即使用户在本地更改了时间,我如何在客户端应用程序中获得正确的 UTC 时间戳?

每次我在本地数据库中保存记录时,我都无法要求服务器提供其当前时间。

我是否应该在我的应用启动后获取服务器时间并维护一个跟踪经过时间的时钟服务?

或者我应该使用其他参数而不是时间来跟踪修改的行?

我该如何处理这个问题?

【问题讨论】:

  • 您能否发布一些有关如何获取本地时间并将其转换为 UTC 时间的代码?
  • @Arun 校验码 sn-p
  • 我获取本地时间,然后在更新到服务器之前转换为 UTC,因为我必须向用户显示时间。从来没有这个问题。我认为问题可能是使用日历直接获取 UTC 时间。尝试按照此链接中的建议使用 DateFormat。 stackoverflow.com/questions/21349475/…

标签: android timestamp client-server data-synchronization sql-timestamp


【解决方案1】:

我建议您不要依赖设备的本地时间戳,因为在很多情况下本地时间可能不正确。管理时间戳的更好方法使用服务器时间服务器可以在所有响应中添加一个时间戳,并且您可以保存这个与 API 端点映射的时间戳尝试使您的响应链接:

{
"timestamp": 1576566019,
"success": true,
"message": "User list!",
"data": [
    {
   //your response body
   }
 }

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多