Java Spring JPA MYSQL的日期缩短了一天
我正在使用一个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
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;
好的,谢谢,我就这样试试!