Spring JPA java.util.Date 到 Mysql 时间戳,日期值错误

Ram*_*bhu 5 java mysql jpa

我有一个带有日期字段的 JPA 实体被持久化到 Mysql DateTime 中。

场地:

  @Column(name = "CREATION_DATE")
  private Date creationDate;
Run Code Online (Sandbox Code Playgroud)

列:
CREATION_DATE日期时间 DEFAULT NULL,

二传手:

request.setCreationDate(new Date());//Value set to current date
Run Code Online (Sandbox Code Playgroud)

我收到一个奇怪的错误,即持续日期比当前时间少 8 小时。尝试了以下几种方法:

  1. 使用@Temporal(TemporalType.TIMESTAMP)该字段

  2. 设置默认时区
    TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

  3. 设置前打印日期,显示正确值。

  4. 也在 mysql 层设置时区:
    SET GLOBAL time_zone = '+8:00'; SET SESSION time_zone = '+8:00';

  5. 将字段类型更改为 java.sql.Timestamp

上述方法都没有帮助。有人遇到过类似的问题吗?有什么线索吗?

Ram*_*bhu 4

找到问题了,问题出在jdbc连接URL上。

spring.datasource.url=jdbc:mysql://:3307/dbname? useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

由于 URL 中的服务器时区设置,GMT+8 时间转换为 UTC,从而导致 8 小时的时差。删除 URL 中的 serverTimezone 参数后,日期工作正常。感谢尼尔和沙辛的时间和支持。