mariadb MySQL Date列从REST调用返回的时间不正确

zujrkrfu  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(104)

我有一个包含DATETIME列my_date的MySQL表。
此列在我的域对象中定义为类型java.util.Date,并注解为Temporal

@Entity()
@Table(name="Thing")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Thing {
    ... 
    @Column(name="my_date", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date myDate;
    ...
}

根据MySQL Workbench,数据库中当前的my_date列值为2022-07-17 12:34:56
我有一个非常简单的REST端点,它是使用Spring JPA创建的,出于某种原因,它将该值拉为:

...
"myDate": "2022-07-17T19:34:56.000+00:00"
...

为什么时间部分返回的值比数据库中显示的值晚7小时
更新:我实际上正在使用MariaDB(10.7.3-MariaDB)。不确定这是否与此处相关,但我刚刚意识到这一点,所以提到它只是以防万一,不知何故,可能是时间部分得到抵消的原因。

px9o7tmv

px9o7tmv1#

我认为这是时区的问题,你可以添加代码像下面的Docerfile为容器的Mysql或您的应用程序

RUN rm /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
更新1

根据https://javabydeveloper.com/temporal/
Java 8日期/时间类和SQL类型之间的Map是隐式的,不需要指定@Temporal注解。
尝试删除@Temporal注解

更新2

java.sql.Timestamp是特定于时区的吗?
https://stackoverflow.com/a/14070771/16702058
例如:您的本地时区是GMT+2。您存储“2012-12-25 10:00:00 UTC”。数据库中存储的实际值是“2012-12-25 12:00:00”。您再次检索它:您将再次以“2012-12-25 10:00:00 UTC”的形式获取该时间戳(但仅当您使用getTimestamp(..)检索该时间戳时),但当另一个应用程序以GMT+0时区访问数据库时,它将以“2012-12-25 12:00:00 UTC”的形式检索该时间戳。

相关问题