在Hibernate中存储日期作为UTC时间日期?

时间:2016-04-15 08:10:04

标签: java mysql hibernate date datetime

我面临一个有趣的问题。在我当地的环境中,我在PDT时间。当我通过Hibernate将日期存储到我的MySQL数据库之前和我的前端存储UTC日期时,我会在存储之前检查Java中的日期,并且日期实际上转换为我系统的时间。区是。我真的很好奇为什么这是因为我的前端日期格式为UTC日期,所以我将系统时区从PDT更改为EDT,Hibernate上的日期最后在我试图存储时的EDT时间那个日期。有什么方法可以更改它,以便在所有环境中,如果日期不在UTC时区,则日期将以UTC时间格式存储?

2 个答案:

答案 0 :(得分:0)

后端方:

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

例如,如果您的数据库设置为使用UTC,则Java中可能存在多个可能的UTC时区,因此您可以通过告诉它确切的数据库时区来澄清这一点:

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 Timzone,您可以参考此链接Should MySQL have its timezone set to UTC?

答案 1 :(得分:0)

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

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

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