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
DATETIME
um eineLocalDateTime
zu speichern und einVARCHAR
Speichern einer Zeitzone wie"Europe/Paris"
oder einSMALLINT
Einsparung eines Offsets in Minuten. - Konvertieren Sie die
ZonedDateTime
zu einemString
und in einemVARCHAR
speichern Spalte wie"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. Sie müssen es dann beim Lesen aus der Datenbank parsen.