【问题标题】:Storing dates in Hibernate as UTC time dates?将 Hibernate 中的日期存储为 UTC 时间日期?
【发布时间】:2016-08-07 02:28:14
【问题描述】:

我正面临一个有趣的问题。在我的本地环境中,我在 PDT 时间。当我从前端存储 UTC 日期时,就在我通过 Hibernate 将日期存储到我的 MySQL 数据库之前,我在存储日期之前检查 Java 中的日期,并且日期实际上转换为我系统的时区。我真的很好奇为什么即使我在前端的日期格式为 UTC 日期,所以我将系统时区从 PDT 更改为 EDT,而 Hibernate 中的日期在下次我尝试存储时最终是 EDT 时间那个日期。有什么方法可以更改它,以便在所有环境中,如果日期尚未在 UTC 时区中,则将其存储为 UTC 时间?

【问题讨论】:

  • 你在mysql中配置了与时区相关的东西吗?
  • @dambros 不,我没有。你建议我这样做的最好方法是什么?我的数据库中有一个列,可用于存储时区。
  • 试试答案here

标签: java mysql hibernate date datetime


【解决方案1】:

后端:

MySQL有setTimestamp/getTimestamp的代码,但是只有设置了连接参数useLegacyDatetimeCode=false才会启用,进一步学习可以参考this document

例如,如果您的数据库设置为使用 UTC,Java 中可能有多个可能的 UTC 时区,因此您可以通过准确告诉 mysql-connector 数据库时区是什么来澄清这一点:

String url =
 "jdbc:mysql://localhost/databasename?useLegacyDatetimeCode=false&serverTimezone=UTC+05:30";

客户端:

将下面的代码放在 web.xml 文件中,它将占用您的系统时区并在网页上以 UTC 显示时间..

<context-param>
   <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
   <param-value>true</param-value>
</context-param>

并为 MySQL 设置 UTC 时区,您可以参考此链接 Should MySQL have its timezone set to UTC?

【讨论】:

  • 有什么方法可以实际更改它,以便将时区更改为 UTC 时区而不是系统时区?
  • 在 UTC 中设置您的系统时区,将上面的代码放在 web.xml 中,这样它将始终显示系统时区到前端。
  • 我实际上想要它,以便后端始终存储 UTC 时间,前端对我来说并不重要。我也不想更改我的系统时区
  • 那么你想用java在mysql中设置UTC时区吗?
  • 如果可能的话在我的 .MySQL 数据库中是的
【解决方案2】:

Hibernate 5.2 简化了此任务,如 this article 中所述。

基本上,您现在可以使用以下配置属性为所有 TIMESTAMPTIME 列强制使用 UTC 时区:

<property name="hibernate.jdbc.time_zone" value="UTC"/>

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2010-11-23
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2011-02-04
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多