MySQL日期列从REST调用返回错误的时间



我有一个MySQL表,包含一个DATETIME列my_date.

此列在我的域对象中定义为类型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;
...
}

当前数据库中my_date列的值是2022-07-17 12:34:56,根据MySQL Workbench。

我有一个非常简单的REST端点,使用Spring JPA创建,由于某种原因将该值拉为:

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

为什么时间部分在7小时后返回值比在数据库中显示的要多?

更新:我实际上使用MariaDB (10.7.3-MariaDB)。不确定这是否与这里相关,但我突然想到了,所以提到它只是以防万一,可能会导致时间部分偏移。

我认为这是时区问题,你可以添加如下代码到Dockerfile Mysql的容器或你的应用程序

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

更新1

根据https://javabydeveloper.com/temporal/

Java 8 Date/Time类和SQL类型之间的映射是隐式的,不需要指定@Temporal注释。

try remove @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"。

相关内容

  • 没有找到相关文章

最新更新