私は自分のアプリケーションのデフォルトのタイムゾーンとしてUTCを定義するためにいくつかのテストを作ってるんです。まず第一に、私は私のdatetime値はUTCのいずれかで保存することにしたいです。
ヴラッド・ミホールセアによると(https://vladmihalcea.com/how-to-store-date-time-and-timestamps-in-utc-time-zone-with-jdbc-and-hibernate/)とhttps://でmoelholm .COM / 11分の2016/09 /春・ブート・タイムゾーン-と、休止状態を制御/私はプロパティファイルに設定されています:
spring.jpa.properties.hibernate.jdbc.time_zone= UTC
私はH2データベースを使用しているテストのために、私はすべてのJava 8のdateTimeタイプでサンプルエンティティを作成しました。
私のLiquiBaseを設定では、彼らはこのように定義されています。
<column name="instant" type="timestamp"/>
<column name="local_date" type="date"/>
<column name="local_time" type="time"/>
<column name="offset_time" type="time"/>
<column name="local_date_time" type="timestamp"/>
<column name="offset_date_time" type="timestamp"/>
<column name="zoned_date_time" type="timestamp"/>
私は、私はすべてのフィールドの良いタイプを使用していると思います。それは時間のSQLタイプではない、タイムスタンプされている「LOCAL_TIME」「offset_time」を除くすべてのフィールドの仕事です。
あなたが見ることができるように私は8:39(パリGMT + 2)にこの行を追加し、タイムスタンプは良いUTC値(午前6時38午前)を持っています。しかし、「LOCAL_TIME」と「offset_time」の両方が変な値(7:39)を持っています。
あなたのいくつかのアイデアを持っている場合、この動作は、なぜ私の2時間フィールドがない正しく値を格納私はなぜだろうか。
PS:バージョン:
- 休止状態:5.2.17.Finalを
- 春ブーツ:2.0.4.RELEASE
私のサンプルエンティティを使用してデータを挿入します。
import javax.persistence.*;
import java.io.Serializable;
import java.time.*;
import java.util.Objects;
@Entity
@Table(name = "avdev_myData")
public class MyData implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "instant")
private Instant instant;
@Column(name = "local_date")
private LocalDate localDate;
@Column(name = "local_time")
private LocalTime localTime;
@Column(name = "offset_time")
private OffsetTime offsetTime;
@Column(name = "local_date_time")
private LocalDateTime localDateTime;
@Column(name = "offset_date_time")
private OffsetDateTime offsetDateTime;
@Column(name = "zoned_date_time")
private ZonedDateTime zonedDateTime;
私は、Hibernateのバグトラッカーに問題を開いて、私の問題の答えを持っていました。
LocalTimeのために形質転換のは、私がテストを実行していた1970年1月1日ではない日を基準とします。だから、DSTは取り扱っておりません。
ヴラッド・ミホールセアによると、我々はそれがDST期間にだかどう我々は、日付を知っているし、もちろんので、代わりのLocalDateTimeを使用する必要があります。
よろしく