Java Spring JPA MYSQL的日期缩短了一天

Java Spring JPA MYSQL的日期缩短了一天,java,mysql,spring,spring-boot,hibernate,Java,Mysql,Spring,Spring Boot,Hibernate,我正在使用一个spring引导项目,该项目使用JPA连接到一个本地MySQL数据库。我有一个带有DATE列的表,该列在JPA模型类中镜像为private DATE myDate且类型为java.sql.Date。当我在页面上显示项目中的记录时,日期落后一天(例如,如果是2021-01-25,则页面显示2021-01-24),当我通过项目更新或添加记录时,新选择的日期也落后于我选择的日期一天。我已经尝试添加spring.jpa.properties.hibernate.jdbc.time\u zo

我正在使用一个spring引导项目,该项目使用JPA连接到一个本地MySQL数据库。我有一个带有
DATE
列的表,该列在JPA模型类中镜像为
private DATE myDate且类型为
java.sql.Date。当我在页面上显示项目中的记录时,日期落后一天(例如,如果是2021-01-25,则页面显示2021-01-24),当我通过项目更新或添加记录时,新选择的日期也落后于我选择的日期一天。我已经尝试添加
spring.jpa.properties.hibernate.jdbc.time\u zone:CET
,但没有任何效果。我在页面和表单上以如下方式显示记录:
${record.myDate}

<fieldset>
   <form:label path="myDate">Date *</form:label>
   <form:input path="myDate" type="date" required="required" class="form-control"/>
   <form:errors path="myDate" cssClass="text-warning" />
</fieldset>

日期*

MySQL文档说明:

MySQL以UTC值存储时间戳。但是,MySQL存储 DATETIME值,不带时区

因此,当您通过JPA从数据库中检索数据值时,很可能会给它分配一个与您期望不符的时区(可能是执行代码的上下文中的默认时区—您的应用程序服务器)

我认为要使其正常工作,您可能需要在MySQL中使用
时间戳
列,而不是
日期时间

一旦进行了更改,您可能还应该使用
LocalDateTime
而不是
Date
。 JPA支持LocalDateTime-使用以下列定义:

@Column(name = "my_date_time", columnDefinition = "TIMESTAMP")
private LocalDateTime myDateTime;

好的,谢谢,我就这样试试!