2016-11-11 146 views
1

我需要存储来自不同国家的多个用户详细信息。如何将日期存储在数据库中(采用UTC格式)以及如何根据其时区向用户显示日期。 我正在使用Java和mySQL。在Java中处理多个时区

+1

有什么解决方案使用Java 8? –

+0

请看看http://stackoverflow.com/questions/12487125/java-how-do-you-convert-a-utc-timestamp-to-local-time – Anptk

+0

要转换时区之间的时间[JodaTime](http ://stackoverflow.com/questions/19002978/in-joda-time-how-to-convert-time-zone-without-changing-time)是你最好的选择。 – Thiefster

回答

0

在MySQL中,在表中使用TIMESTAMP数据类型。

对于每个用户,存储timezone列,VARCHAR(64)是该列的良好数据类型。当用户注册使用您的系统时,请询问时区值。矿是America/New_York。您的可能或不可能是Asia/Kolkata。对于此用户首选项设置的用户界面,WordPress.org软件就是一个很好的例子。

最后,当你建立从Java程序到你的DBMS在代表用户的连接,发出SQL命令

SET SESSION time_zone='(whatever tz string the user gave you)' 

你处理任何用户数据之前。

这将导致您的表格的所有时间都转换为UTC,并且所有时间都会被转换为本地。它适用于NOW()CURDATE()。再次,您必须使用TIMESTAMP而不是DATETIMEDATE数据类型。

确保您的服务器操作系统和默认MySQL时区设置为UTC。如果在开始将信息加载到数据库之前不这样做,则几乎不可能修复。如果你使用一个供应商来运行MySQL,坚持他们得到这个权利,并且如果他们没有正确的解决方案,就会解雇供应商。

+0

感谢您的回复。我会尝试实施这些步骤。 –