Mysql
 sql >> Datenbank >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime und Timestamp

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:

  1. Verwenden Sie eine Spalte vom Typ DATETIME um eine LocalDateTime zu speichern und ein VARCHAR Speichern einer Zeitzone wie "Europe/Paris" oder ein SMALLINT Einsparung eines Offsets in Minuten.
  2. Konvertieren Sie die ZonedDateTime zu einem String und in einem VARCHAR speichern Spalte wie "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Sie müssen es dann beim Lesen aus der Datenbank parsen.