Jakie są typy kolumn w MySQL? Podejrzewam, że to DATETIME. Ten typ nie przechowuje "momentu w czasie", przechowuje "godzinę na zegarze", więc może oznaczać inny moment w różnych strefach czasowych.
Gdy sterownik MySQL zapisuje java.util.Date do kolumny DATETIME, musi wybrać jakąś strefę czasową, aby zapisać "godzinę na zegarze", ponieważ ten sam java.util.Date może oznaczać inną godzinę w różnych strefach czasowych. Przechowuje godzinę jak w lokalnej strefie czasowej serwera MySQL.
LocalDateTime nie ma tego problemu, ponieważ jest jak DATETIME. Reprezentuje godzinę na zegarze, a nie moment w czasie, dlatego rok/miesiąc/dzień-godzina/minuta/sekunda są po prostu zapisywane w bazie danych. Uwaga w dzienniku hibernacji LocalDateTime jest podana bez zmian, podczas gdy obok daty znajduje się strefa czasowa („CST”).
Ogólnie rzecz biorąc, dobrą praktyką jest przechowywanie czasu zawsze w UTC, więc używaj DateTime, a nie Date ani LocalDateTime. DateTime z konwerterem jadira zawsze przechowuje/odczytuje DATETIME jako UTC.