Po pierwsze, pisałem o tym szczegółowo wcześniej, więc przeczytaj moje odpowiedzi tutaj i tutaj , a także ten post na blogu autorstwa Lau Taarnskov .
Ze szczególnym uwzględnieniem MySQL, generalnie nie chcesz używać TIMESTAMP
pole czasu lokalnego przyszłego zdarzenia, ponieważ zostanie ono przekonwertowane ze strefy czasowej sesji na UTC w czasie zapisu i z powrotem z UTC na strefę czasową sesji w czasie odczytu. Nawet jeśli są to te same identyfikatory strefy czasowej (które nie muszą być), nie ma gwarancji, że dane strefy czasowej nie zmienią się dla jednej lub obu stref czasowych między zapisaniem danych a zdarzeniem ma miejsce.
Zamiast tego użyj DATETIME
pole, które nie zawiera niejawnych konwersji strefy czasowej. Dostajesz dokładną wartość, którą napisałeś. Zapisz lokalny czas wydarzenia i zapisz VARCHAR
pole zawierające identyfikator strefy czasowej zdarzenia. To jedyny sposób na zachowanie pierwotnej intencji użytkownika.
Przypadki uzasadniające i skrajne są opisane w odpowiedziach, których udzieliłem wcześniej.