sql >> Databáze >  >> RDS >> Mysql

LocalDateTime, ZonedDateTime a Timestamp

Časové razítko rozšiřuje Date zajistit přesnost nanosekund. Ani Date ani Timestamp jsou navrženy tak, aby odkazovaly na konkrétní časové pásmo jako ZoneDateTime .

Pokud potřebujete převést ZonedDateTime -> Timestamp budete muset zrušit informace o časovém pásmu/offsetu. Např.

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

a pro převod Timestamp -> ZonedDateTime musíte zadat offset:

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

nebo časové pásmo:

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

Pokud je vaším záměrem uložit ZonedDateTime proměnné v databázi a zachovat různá časová pásma tam uvedená, doporučuji podle toho navrhnout databázi. Návrhy:

  1. Použijte sloupec typu DATETIME pro uložení LocalDateTime a VARCHAR uložení časového pásma jako "Europe/Paris" nebo SMALLINT uložení offsetu během několika minut.
  2. Převeďte ZonedDateTime do String a uložte do VARCHAR sloupec jako "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Poté jej budete muset analyzovat při čtení z databáze.


  1. Data ze dvou tabulek se stejnými názvy sloupců

  2. Zjistit selhání aktualizace/vložení mysql z důvodu porušení jedinečného omezení

  3. SQL Server Nejnovější verze, edice a historie SQL Serveru

  4. Jak nainstalovat pgAdmin 4 na Ubuntu 20.04/18.04/16.04