【问题标题】:Handling multiple timezone in Java [closed]在 Java 中处理多个时区 [关闭]
【发布时间】:2017-03-25 08:48:54
【问题描述】:

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

【问题讨论】:

  • 有没有使用 Java 8 的解决方案?
  • 在时区之间转换时间JodaTime 是您最好的选择。
  • @Thiefster 如果操作使用的是 Java 8,则可能不需要 JodaTime。
  • 建议我们重新打开这个问题。我相信投票关闭它的人认为这完全与 Java 日历和时间数据类型有关,而 OP 似乎对解决 DBMS 的问题这样简单的答案感到满意。

标签: java mysql date timezone


【解决方案1】:

在 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,请坚持让他们做对了,如果他们做错了,就解雇他们。

【讨论】:

  • 感谢您的回复。我将尝试实施这些步骤。
猜你喜欢
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多