我面临一个有趣的问题。在我当地的环境中,我在PDT时间。当我通过Hibernate将日期存储到我的MySQL数据库之前和我的前端存储UTC日期时,我会在存储之前检查Java中的日期,并且日期实际上转换为我系统的时间。区是。我真的很好奇为什么这是因为我的前端日期格式为UTC日期,所以我将系统时区从PDT更改为EDT,Hibernate上的日期最后在我试图存储时的EDT时间那个日期。有什么方法可以更改它,以便在所有环境中,如果日期不在UTC时区,则日期将以UTC时间格式存储?
答案 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中所述。
基本上,您现在可以使用以下配置属性强制所有TIMESTAMP
和TIME
列的UTC时区:
<property name="hibernate.jdbc.time_zone" value="UTC"/>