Android 将数据同步到服务器时如何处理本地时区更改?

Android 将数据同步到服务器时如何处理本地时区更改?,android,timestamp,client-server,data-synchronization,sql-timestamp,Android,Timestamp,Client Server,Data Synchronization,Sql Timestamp,我有一个android应用程序。应用程序执行一些任务,并使用时间戳更新本地数据库中这些任务的状态。假设用户记录了一个事件。因此,一个条目被添加到带有事件名称和时间戳的事件表中。对于时间戳,我以毫秒为单位获取当前时间,将其转换为UTC时间,并将其保存在DB中 val cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")) val t = cal.time.time 应用程序正在运行同步服务。此服务基本上维护一个表示上次同步时间的时间戳。服务

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

val cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"))
val t = cal.time.time
应用程序正在运行同步服务。此服务基本上维护一个表示上次同步时间的时间戳。服务迭代数据库中的所有表,查找时间戳大于服务维护的时间戳的记录,并将这些记录同步到服务器。响应同步的服务器将其当前时间(UTC)返回到客户端应用程序上的同步服务。客户端应用程序将其时间戳值更新为服务器提供的时间戳值

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

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

我不能每次去本地数据库保存记录时都要求服务器给出它的当前时间

一旦我的应用程序启动,我应该获得服务器时间并维护一个时钟服务来跟踪运行时间吗

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


如何处理此问题?

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

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

您能否发布一些代码,说明如何获取本地时间并将其转换为UTC时间?@Arun检查代码片段我获取本地时间,然后在更新到服务器之前转换为UTC,因为我必须向用户显示时间。从来没有这个问题。我认为问题可能是使用日历直接获取UTC时间。尝试使用此链接中建议的DateFormat。