Mysql
 sql >> Baza danych >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime i znacznik czasu

sygnatura czasowa wydłuża Date aby zapewnić dokładność nanosekundową. Ani Date ani Timestamp są zaprojektowane tak, aby odwoływać się do określonej strefy czasowej jako ZoneDateTime .

Jeśli potrzebujesz przekonwertować ZonedDateTime -> Timestamp będziesz musiał odrzucić informacje o strefie czasowej/przesunięciu. Np.

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

i do konwersji Timestamp -> ZonedDateTime musisz określić przesunięcie:

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

lub strefa czasowa:

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

Jeśli Twoim zamiarem jest zapisanie ZonedDateTime zmiennych w bazie danych i zachować różne strefy czasowe tam określone, zalecam odpowiednie zaprojektowanie bazy danych. Sugestie:

  1. Użyj kolumny typu DATETIME aby zapisać LocalDateTime i VARCHAR zapisywanie strefy czasowej, takiej jak "Europe/Paris" lub SMALLINT zapisanie przesunięcia w kilka minut.
  2. Konwertuj ZonedDateTime do String i zapisz w VARCHAR kolumna jak "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Będziesz wtedy musiał przeanalizować go podczas czytania z bazy danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z ról Nowość w MySQL 8

  2. Codeigniter simple_query vs. konstruktor zapytań (wstaw, zaktualizuj i usuń)

  3. $stmt->close() vs $stmt->free_result()

  4. Jak zmienić sekundy na wartość czasu w MySQL?

  5. SQLSTATE[HY000] [2002] Brak takiego pliku lub katalogu