Mysql
 sql >> база данни >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime и Timestamp

Показател за време разширява Date за осигуряване на наносекундна точност. Нито Date нито Timestamp са предназначени да се отнасят към конкретна часова зона като ZoneDateTime .

Ако трябва да конвертирате ZonedDateTime -> Timestamp ще трябва да изхвърлите информацията за часовата зона/отместването. Напр.

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

и за конвертиране на Timestamp -> ZonedDateTime трябва да посочите отместване:

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

или часова зона:

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

Ако намерението ви е да запазите ZonedDateTime променливи в базата данни и запазване на различните часови зони, посочени там, препоръчвам да проектирате вашата база данни съответно. Предложения:

  1. Използвайте колона от тип DATETIME за да запишете LocalDateTime и VARCHAR запазване на часова зона като "Europe/Paris" или SMALLINT запазване на отместване за минути.
  2. Конвертирайте ZonedDateTime към String и запишете в VARCHAR колона като "2017-05-16T14:12:48.983682+01:00[Europe/London]" . След това ще трябва да го анализирате, когато четете от базата данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql like% заявката е бавна с индекс на пълен текст

  2. Хибернация – уникалното ограничение на колоната се игнорира

  3. UTF-8 докрай

  4. Бърз старт на миграцията на база данни с помощта на Talend

  5. Как да изберете всички колони в sql с изключение на една колона?