如何将时区正确设置为UTC,以便所有时间戳都以这种格式正确保存和检索?

时间:2019-06-26 09:46:02

标签: mysql hibernate spring-boot

在我的spring boot(2.1.4)项目中,我具有mysql数据库(5.7.21-服务器版本)和以下应用程序属性:

spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC

hibernate.jdbc.time-zone=UTC

现在,当我使用Java使用@CreationTimestamp保存实体记录(通过使用@PostConstruct或某些控制器/服务逻辑)时,日期已正确转换为UTC时区并保存了do数据库,并以UTC格式检索(如我所愿)。但是,当我通过data.sql文件添加(其他)记录时。相应的时间戳字段也具有UTC时区,但是这次时间未正确转换为UTC(这只是我当前的时间,时区设置为UTC)。

如何正确设置这两种情况,以始终将本地时间转换为UTC,保存并始终从数据库中将其作为UTC检索?

更改mysql全局时区是否可以解决该问题?

示例:

我在时区:GMT + 2 在11:11:53保存的记录具有以下设置时间:

1。)Java创建的记录:09:11:53

2。)data.sql创建记录:11:11:53

两者都位于UTC时区(当在客户端中获取时,我可以看到它),但只有第一个是正确的。

1 个答案:

答案 0 :(得分:1)

将全球时区设置为UTC可以解决此问题(所有时间戳现在都设置为 UTC ,在我的本地时间中显示,但是以 UTC的形式检索(来自数据库),满足我的条件并针对javadata.sql原始记录进行了统一。

要在Windows上执行此操作,我必须从此处下载时区sql文件: https://dev.mysql.com/downloads/timezones.html

,然后运行:

mysql -D mysql -uroot -pmypassword < timezone_posix.sql
SET @@global.time_zone = UTC;

这篇文章也对我有很大帮助:

How to set correct MySQL JDBC timezone in Spring Boot configuration