Zeitstempel
erweitert Date Nanosekunden-Genauigkeit bereitzustellen. Weder Date noch Timestamp beziehen sich auf eine bestimmte Zeitzone als ZoneDateTime .
Wenn Sie ZonedDateTime konvertieren müssen -> Timestamp Sie müssen die Zeitzonen-/Offset-Informationen verwerfen. Z. B.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
und zum Konvertieren von Timestamp -> ZonedDateTime Sie müssen einen Offset angeben:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
oder Zeitzone:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Wenn Sie ZonedDateTime speichern möchten Variablen in der Datenbank zu speichern und die verschiedenen dort angegebenen Zeitzonen beizubehalten, empfehle ich, Ihre Datenbank entsprechend zu gestalten. Vorschläge:
- Verwenden Sie eine Spalte vom Typ
DATETIMEum eineLocalDateTimezu speichern und einVARCHARSpeichern einer Zeitzone wie"Europe/Paris"oder einSMALLINTEinsparung eines Offsets in Minuten. - Konvertieren Sie die
ZonedDateTimezu einemStringund in einemVARCHARspeichern Spalte wie"2017-05-16T14:12:48.983682+01:00[Europe/London]". Sie müssen es dann beim Lesen aus der Datenbank parsen.