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

LocalDateTime , ZonedDateTime e Timestamp

Timestamp estende Date per fornire una precisione di nanosecondi. Né DateTimestamp sono progettati per fare riferimento a un fuso orario specifico come ZoneDateTime .

Se devi convertire ZonedDateTime -> Timestamp dovrai scartare le informazioni sul fuso orario/offset. Es.

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

e per convertire Timestamp -> ZonedDateTime devi specificare un offset:

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

o fuso orario:

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

Se la tua intenzione è salvare ZonedDateTime variabili nel database e preservare i vari fusi orari ivi specificati, consiglio di progettare il database di conseguenza. Suggerimenti:

  1. Utilizza una colonna di tipo DATETIME per salvare un LocalDateTime e un VARCHAR salvando un fuso orario come "Europe/Paris" o un SMALLINT salvando un offset in pochi minuti.
  2. Convertire il ZonedDateTime a una String e salva in un VARCHAR colonna come "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Dovrai quindi analizzarlo durante la lettura dal database.