タイムスタンプ
Date
を拡張します ナノ秒の精度を提供します。どちらのDate
でもありません Timestamp
も 特定のタイムゾーンをZoneDateTime
として参照するように設計されています 。
ZonedDateTime
を変換する必要がある場合 ->Timestamp
タイムゾーン/オフセット情報を破棄する必要があります。例:
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
Timestamp
を変換するため -> ZonedDateTime
オフセットを指定する必要があります:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
またはタイムゾーン:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
ZonedDateTime
を保存する場合 データベース内の変数とそこで指定されたさまざまなタイムゾーンを保持するため、それに応じてデータベースを設計することをお勧めします。提案:
- タイプ
DATETIME
の列を使用しますLocalDateTime
を保存するには およびVARCHAR
"Europe/Paris"
のようなタイムゾーンを保存する またはSMALLINT
オフセットを数分で保存します。 -
ZonedDateTime
を変換しますString
にVARCHAR
に保存します"2017-05-16T14:12:48.983682+01:00[Europe/London]"
のような列 。次に、データベースから読み取るときに解析する必要があります。