我有一个包含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)。不确定这是否与此处相关,但我刚刚意识到这一点,所以提到它只是以防万一,不知何故,可能是时间部分得到抵消的原因。
1条答案
按热度按时间px9o7tmv1#
我认为这是时区的问题,你可以添加代码像下面的Docerfile为容器的Mysql或您的应用程序
更新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”的形式检索该时间戳。