Umgang mit mehrdeutigen Datumszeiten mit Sommerzeit in MySQL
Wenn Sommerzeit (DST) eintritt, gibt es eine mehrdeutige Stunde, in der es schwierig ist um den vorgesehenen Zeitbezug zu ermitteln. Beispielsweise kann in der Zeitzone Amerika/New York 1:30 Uhr während der Übergangszeit im Herbst zweimal auftreten.
Problem:
Die Felder DATETIME und TIMESTAMP von MySQL sind eindeutig Herausforderungen, wenn es darum geht, mit diesen zwiespältigen Zeiten umzugehen. DATETIME-Felder speichern Datums- und Uhrzeitangaben unverändert, ohne Berücksichtigung von Zeitzonen oder Sommerzeitumrechnungen. TIMESTAMP-Felder konvertieren eingegebene Zeitstempel in UTC und umgekehrt.
Lösung:
1. Verwenden Sie DATETIME-Felder:
Konvertieren Sie Zeitstempel in UTC, bevor Sie sie in DATETIME-Feldern speichern. Dadurch wird sichergestellt, dass Sie die Kontrolle über die genaue UTC-Zeit zum Speichern haben.
2. Interpretation der abgerufenen Daten:
Interpretieren Sie aus DATETIME-Feldern abgerufene Zeitstempel als UTC-Zeitstempel außerhalb von MySQL. Dies verhindert Mehrdeutigkeiten, die durch die Datums-/Uhrzeitfunktionen von MySQL entstehen.
3. Vermeiden Sie TIMESTAMP-Felder:
Vermeiden Sie die Verwendung von TIMESTAMP-Feldern, da diese zu inkonsistenten Konvertierungen zwischen Ortszeit und UTC führen können, wenn die Sommerzeit beteiligt ist.
Implementierung:
Abrufen Daten:
// Example using PHP's DateTime class $timestamp = strtotime($db_timestamp . ' UTC');
Speichern von Daten:
// Example using PHP's DateTime class $UTCDateTime = new DateTime('2009-11-01 1:30:00 EST'); $db_timestamp = $UTCDateTime->format('Y-m-d H:i:s');
Überlegungen:
Das obige ist der detaillierte Inhalt vonWie kann MySQL mit mehrdeutigen Datumsangaben während der Sommerzeitumstellung umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!