我有一个JPA实体,日期字段被持久化到Mysql DateTime中。
字段:
@Column(name = "CREATION_DATE")
private Date creationDate;
柱:
CREATION_DATE
datetime DEFAULT NULL,
设置器:
request.setCreationDate(new Date());//Value set to current date
我收到一个奇怪的错误,持续日期比当前时间小8小时。尝试了几种方法如下:
将@Temporal(TemporalType.TIMESTAMP)
用于字段
设置默认TimeZone
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
在设置前打印日期,显示正确的值。
同样在mysql层设置时区:
SET GLOBAL time_zone = '+8:00';
SET SESSION time_zone = '+8:00';
将字段类型更改为java.sql.Timestamp
上述方法都没有帮助。有人有类似的问题吗?任何线索?
答案 0 :(得分:1)
发现问题,问题出在jdbc连接URL中。
spring.datasource.url = JDBC:MySQL的://:3307 / DBNAME的了useUnicode =真安培; useJDBCCompliantTimezoneShift =真安培; useLegacyDatetimeCode =假安培; serverTimezone = UTC 强>
由于URL中的服务器时区设置,GMT + 8时间被转换为UTC,这导致了8小时的时差。删除URL中的serverTimezone参数后,日期工作正常。感谢Neil和Shazin的时间和支持。