sql >> Database >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime en Tijdstempel

Tijdstempel verlengt Date om nanoseconden nauwkeurigheid te bieden. Geen van beide Date noch Timestamp zijn ontworpen om naar een specifieke tijdzone te verwijzen als ZoneDateTime .

Als u ZonedDateTime . moet converteren -> Timestamp u zult de tijdzone/offset-informatie moeten weggooien. Bijv.

LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));

en voor het converteren van Timestamp -> ZonedDateTime je moet een offset specificeren:

LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));

of tijdzone:

ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));

Als het uw bedoeling is om ZonedDateTime . op te slaan variabelen in de database en behoud de verschillende tijdzones die daar zijn gespecificeerd, raad ik aan om uw database dienovereenkomstig te ontwerpen. Suggesties:

  1. Gebruik een kolom van het type DATETIME om een ​​LocalDateTime . op te slaan en een VARCHAR een tijdzone opslaan zoals "Europe/Paris" of een SMALLINT een offset in minuten opslaan.
  2. Converteer de ZonedDateTime naar een String en sla op in een VARCHAR kolom zoals "2017-05-16T14:12:48.983682+01:00[Europe/London]" . U moet het dan ontleden wanneer u uit de database leest.


  1. Redenen om Access-apps om te zetten in webgebaseerde apps

  2. MySQL met Soft-Deletion, Unique Key en Foreign Key-beperkingen

  3. Python-lijst naar PostgreSQL-array

  4. Geautomatiseerde of regelmatige back-up van mysql-gegevens