public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
Instant instant = Instant.from(zdt);
Timestamp timestamp = Timestamp.from(instant);
System.out.println(ldt + "\n");
System.out.println(zdt + "\n");
System.out.println(instant + "\n");
System.out.println(timestamp + "\n");
}
そしてそれは印刷します:
2017-05-07T18:13:26.969
2017-05-07T18:13:26.969-04:00[America/New_York]
2017-05-07T22:13:26.969Z
2017-05-07 18:13:26.969
Timestamp
と同時にSQLInstant
を保存するにはどうすればよいですか?どこからでもTimestamp
を取得し、それを世界のその地域で発生した時間に変換できる必要があります。問題は、システムクロックが設定されている時間と同じ時間に保存され続けることです。
Timestamp
からではなく、LocalDateTime
からInstant
を取得するのが最善です。
最初のステップは、ZonedDateTime
を取得してGMTに変換することです。
ZonedDateTime gmt = zdt.withZoneSameInstant(ZoneId.of("GMT"));
次に、Timestamp
を介してそれをLocalDateTime
に変換できます。
Timestamp timestamp = Timestamp.valueOf(gmt.toLocalDateTime());
「TIMESTAMPWITHTIME ZONE」の値を表す場合は、Calendarオブジェクトを受け取る setTimestamp の特定のオーバーロードを使用する必要がある場合があります。