sql >> Databasteknik >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime och Timestamp

Timestamp utökar Date för att ge nanosekunders noggrannhet. Inte heller Date inte heller Timestamp är utformade för att referera till en specifik tidszon som ZoneDateTime .

Om du behöver konvertera ZonedDateTime -> Timestamp du måste kassera informationen om tidszon/offset. T.ex.

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

och för att konvertera Timestamp -> ZonedDateTime du måste ange en offset:

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

eller tidszon:

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

Om din avsikt är att spara ZonedDateTime variabler i databasen och bevara de olika tidszonerna som anges där, rekommenderar jag att du utformar din databas därefter. Förslag:

  1. Använd en kolumn av typen DATETIME för att spara en LocalDateTime och en VARCHAR sparar en tidszon som "Europe/Paris" eller en SMALLINT sparar en offset på några minuter.
  2. Konvertera ZonedDateTime till en String och spara i en VARCHAR kolumn som "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Du måste sedan analysera den när du läser från databasen.


  1. Hur man upptäcker om ett värde innehåller minst ett nummer i SQL Server

  2. Hur man tar bort en mysql-post med jquery

  3. Datatyp för lagring av ip-adress i SQL Server

  4. Hur inkluderar man det totala antalet returnerade rader i resultatuppsättningen från kommandot SELECT T-SQL?