1. ホーム
  2. java

[解決済み] JPAとHibernateで日付/時刻とタイムスタンプをUTCタイムゾーンに保存する方法

2022-08-30 17:53:16

質問

データベースに日付/時刻をUTC (GMT) タイムゾーンとして格納するようにJPA/Hibernateを設定するにはどうすればよいですか。このアノテーションされたJPAエンティティを考えてみましょう。

public class Event {
    @Id
    public int id;

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

日付が 2008-Feb-03 9:30am Pacific Standard Time (PST) である場合、2008-2-03 5:30pm という UTC の時刻をデータベースに保存してほしいのです。同様に、データベースから日付を取得する際にも、UTCとして解釈されるようにしたい。つまり、この場合、530pmは530pm UTCとなります。表示されるときは、9:30am PSTとしてフォーマットされます。

どのように解決するのですか?

Hibernate 5.2以降では、以下の設定プロパティを properties.xml JPA設定ファイルに以下の設定プロパティを追加することで、UTCタイムゾーンを強制的に設定できるようになりました。

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

Spring Bootを使用している場合は、このプロパティを application.properties ファイルに追加してください。

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