我需要存储来自不同国家的多个用户详细信息。如何在数据库中存储日期(以UTC格式)以及如何根据用户的时区向用户显示日期。我正在使用Java和mySQL
在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
而不是DATETIME
或DATE
数据类型。
确保您的服务器操作系统和默认MySQL时区设置为UTC。如果在开始将信息加载到数据库之前不这样做,则几乎不可能修复。如果你使用一个供应商来运行MySQL,坚持他们做得对,如果他们做得不对,就解雇他们。