sql >> Database teknologi >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime og Timestamp

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:

  1. Brug en kolonne af typen DATETIME for at gemme en LocalDateTime og en VARCHAR gemmer en tidszone som "Europe/Paris" eller en SMALLINT gemmer en offset på få minutter.
  2. Konverter ZonedDateTime til en String og gem i en VARCHAR kolonne 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.


  1. Tilføj List<int> til en mysql-parameter

  2. Ret fejl:"SELECTs til venstre og højre for UNION har ikke det samme antal resultatkolonner" i SQLite

  3. Sorter Multi-dimensional Array efter givne indekser - PHP?

  4. dvale orakelsekvens producerer stort hul