假设我的服务器位于美国,而我住在俄罗斯。我们知道他们有不同的时区。
我的应用程序获取文本(String
)来自服务器。这个文本数据有Date
数据库中的列用于保留记录日期。
当我获取数据时,我也得到date
知识。这样我就可以按时间对它们进行分组。第一个在顶部,最后一个在底部。任何...
我编写了一个函数来显示更易于人类阅读的日期值,例如“13 小时”、“9 分钟”。服务器向我发送服务器(美国)时区的日期。
当我用俄罗斯时区计算应用程序的时间时(因为它是应用程序的当前时区),它计算错误。所以,这不是任何人想要的东西。
我应该怎么做才能实现正确的计算?
注解:该应用程序将由不同国家的公民使用。所以我不能使计算静态。
实际上并不存在“俄罗斯时区”或“美国时区”之类的东西。这两个国家都有几个不同的时区。请参阅维基百科文章俄罗斯时间 https://en.wikipedia.org/wiki/Time_in_Russia and 美国时间 https://en.wikipedia.org/wiki/Time_in_the_United_States.
您应该始终编写服务器代码,使其不依赖于服务器运行所在的时区。通常这是通过将所有时间存储为来完成的UTC https://en.wikipedia.org/wiki/Coordinated_Universal_Time。由于客户端是 Android 设备,只需在客户端上转换为本地时间或从本地时间转换为本地时间,仅向服务器发送 UTC 或从服务器发送 UTC。
如果您使用 Java,您可能应该使用乔达时间 http://www.joda.org/joda-time/为了您的转化。它比Calendar
class.
Update
正如 Basil 在评论中指出的那样,Joda-Time 项目现在处于维护模式。该团队建议迁移到java.time
类定义为JSR 310 https://jcp.org/en/jsr/detail?id=310。对于早期的 Android,请参阅三十后端口 http://www.threeten.org/threetenbp/ and 三十ABP https://github.com/JakeWharton/ThreeTenABP项目。看如何使用… https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)