【问题标题】:Spring JPA MYSQL Date off by one daySpring JPA MYSQL 日期减一天
【发布时间】:2021-05-21 13:18:01
【问题描述】:

我正在处理一个使用 JPA 连接到本地 MySQL 数据库的 Spring Boot 项目。我有一个带有DATE 列的表,该列在JPA 模型类中被镜像为private Date myDate;,并且是java.sql.Date; 类型。当我在页面上显示项目中的记录时,日期晚了一天(例如,如果是 2021-01-25,则页面显示 2021-01-24),当我通过项目更新或添加记录时,新选择的日期也比我选择的日期晚一天。我尝试添加spring.jpa.properties.hibernate.jdbc.time_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>

【问题讨论】:

    标签: java mysql spring spring-boot hibernate


    【解决方案1】:

    MySQL 文档说:

    MySQL 以 UTC 值存储 TIMESTAMP。但是,MySQL 存储 没有时区的 DATETIME 值。

    因此,当您通过 JPA 从数据库中检索数据值时,可能会为其分配的时区不是您所期望的(可能是执行代码的上下文中的默认时区 - 您的应用程序服务器)。

    我认为要使这项工作正常进行,您可能需要在 MySQL 中使用 TIMESTAMP 列而不是 DATETIME。

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2012-03-19
      • 2019-11-29
      • 2019-06-22
      • 2013-02-17
      • 1970-01-01
      • 2020-06-08
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多