如何处理服务器和本机android应用程序之间的时区差异?

Jus*_*ork 11 timezone android android-date

假设我的服务器位于美国,我住在俄罗斯.我们知道他们有不同的时区.

我的应用程序String从服务器获取text().而这个文本数据Date在数据库中有列保存记录日期.

当我获得数据时,我也获得了date知识.所以我可以按时间分组.顶部的第一个和底部的最后一个.随你...

我写了一个函数来显示日期值更人性化,如"13小时","9分钟".服务器在服务器(美国)时区发送日期.

当我用俄罗斯时区计算申请时间时(因为它是申请时的当前时区),它计算错误.所以,这不是任何人想要的东西.

我该怎么做才能实现正确的计算?

注释:此应用程序将由不同国家的公民使用.所以我无法使计算静态.

Mat*_*int 6

没有"俄罗斯时区"或"美国时区"这样的东西.这两个国家都有几个不同的时区.参见维基百科文章的时间在俄罗斯美国的时间.

您应该始终编写服务器代码,使其不依赖于运行服务器的时区.通常这是通过将所有时间存储为UTC来完成的.由于客户端是Android设备,只需在客户端上转换为本地时间,从服务器发送UTC或从服务器发送UTC.

如果您使用的是Java,那么您应该使用Joda Time进行转换.它比Calendar同类更清洁,更容易使用.

更新

正如Basil在评论中指出的那样,Joda-Time项目现在处于维护模式.该团队建议迁移到JSR 310java.time定义的类.对于早期的Android,请参阅ThreeTen- BackportThreeTenABP项目.请参阅如何使用.......


Gab*_*han 2

Calendar 类可以在时区之间转换时间,只要您知道服务器和客户端使用哪个时区即可。为了避免将来在移动服务器时出现问题,最好定义数据库中的时间应该是什么。我更喜欢使用 UTC 作为其标准,但您可以使用任何您想要的时区,只要它在您的文档中定义即可,以便您将来知道。

这是一个显示如何执行此操作的问题: Date and time conversion to some other Timezone in java