如何使用 JPA 和休眠以 UTC 时区存储日期/时间和时间戳

2022-08-31 08:45:50

如何配置 JPA/休眠以 UTC (GMT) 时区的形式在数据库中存储日期/时间?请考虑以下带注释的 JPA 实体:

public class Event {
    @Id
    public int id;

    @Temporal(TemporalType.TIMESTAMP)
    public java.util.Date date;
}

如果日期是太平洋标准时间 (PST) 2008 年 2 月 3 日上午 9:30,则我希望将 UTC 时间 2008 年 2 月 3 日下午 5:30 存储在数据库中。同样,当从数据库中检索日期时,我希望将其解释为UTC。因此,在本例中,530pm 是 UTC 时间 530pm。当它显示时,它将被格式化为太平洋标准时间上午9:30。


答案 1

从 Hibernate 5.2 开始,您现在可以通过将以下配置属性添加到 JPA 配置文件中来强制使用 UTC 时区:properties.xml

<property name="hibernate.jdbc.time_zone" value="UTC"/>

如果您使用的是 Spring Boot,请将此属性添加到您的文件中:application.properties

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

答案 2

据我所知,您需要将整个Java应用程序放在UTC时区(以便Hibernate以UTC格式存储日期),并且在显示内容时需要转换为所需的任何时区(至少我们这样做)。

在创业时,我们这样做:

TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));

并将所需的时区设置为日期格式:

fmt.setTimeZone(TimeZone.getTimeZone("Europe/Budapest"))