um UTC-Zeitstempel aus einer Protokolldatei mit lokalen Zeitstempeln zu vergleichen.
Es ist schwierig, den Namen Olson TZ für eine lokale Zeitzone auf tragbare Weise herauszufinden . Glücklicherweise benötigen Sie es nicht, um den Vergleich durchzuführen.
tzlocal
Das Modul gibt eine Pytz-Zeitzone zurück, die der lokalen Zeitzone entspricht:
from datetime import datetime
import pytz
from tzlocal import get_localzone
tz = get_localzone()
local_dt = tz.localize(datetime(2010, 4, 27, 12, 0, 0, 0), is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
Im Gegensatz zu anderen bisher vorgestellten Lösungen vermeidet der obige Code die folgenden Probleme:
- Ortszeit kann mehrdeutig sein dh ein genauer Vergleich kann für einige Ortszeiten unmöglich sein
- Der utc-Offset kann für denselben lokalen Zeitzonennamen für Daten in der Vergangenheit unterschiedlich sein. Einige Bibliotheken, die zeitzonenbezogene Datetime-Objekte unterstützen (z. B.
dateutil
), berücksichtigen dies nicht
Hinweis: Um ein zeitzonenbewusstes datetime-Objekt von einem naiven datetime-Objekt abzurufen, sollten Sie * verwenden :
local_dt = tz.localize(datetime(2010, 4, 27, 12, 0, 0, 0), is_dst=None)
Anstatt von:
local_dt = datetime(2010, 4, 27, 12, 0, 0, 0, tzinfo=tz)
* *is_dst=None
erzwingt eine Ausnahme, wenn die angegebene Ortszeit nicht eindeutig oder nicht vorhanden ist.
Wenn Sie sicher sind, dass alle lokalen Zeitstempel denselben (aktuellen) utc-Offset für die lokale Zeitzone verwenden, können Sie den Vergleich nur mit stdlib durchführen:
timestamp1 = (datetime(2010, 4, 27, 12, 0, 0, 0) - datetime.fromtimestamp(0)).total_seconds()
timestamp2 = (datetime(2010, 4, 27, 9, 0) - datetime.utcfromtimestamp(0)).total_seconds()
timestamp1
und timestamp2
kann direkt verglichen werden.
Hinweis:
timestamp1
Die Formel funktioniert nur, wenn der UTC-Offset bei epoch ( datetime.fromtimestamp(0)
) derselbe ist wie jetzt
fromtimestamp()
Erstellt ein naives Datum / Uhrzeit-Objekt in der aktuellen lokalen Zeitzone
utcfromtimestamp()
Erstellt ein naives Datum / Uhrzeit-Objekt in UTC.