Timestamp
udvider Date for at give nanosekunds nøjagtighed. Hverken Date heller ikke Timestamp er designet til at referere til en bestemt tidszone som ZoneDateTime .
Hvis du har brug for at konvertere ZonedDateTime -> Timestamp du bliver nødt til at kassere tidszone-/forskydningsoplysningerne. F.eks.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
og til konvertering af Timestamp -> ZonedDateTime du skal angive en offset:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
eller tidszone:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Hvis din hensigt er at gemme ZonedDateTime variabler i databasen og bevare de forskellige tidszoner, der er angivet der, anbefaler jeg at designe din database i overensstemmelse hermed. Forslag:
- Brug en kolonne af typen
DATETIMEfor at gemme enLocalDateTimeog enVARCHARgemmer en tidszone som"Europe/Paris"eller enSMALLINTgemmer en offset på få minutter. - Konverter
ZonedDateTimetil enStringog gem i enVARCHARkolonne som"2017-05-16T14:12:48.983682+01:00[Europe/London]". Du bliver så nødt til at parse det, når du læser fra databasen.