datetime.datetime.utcnow()
Warum ist das datetime
keine Angaben zur Zeitzone, da es sich ausdrücklich um eine UTC datetime
?
Ich würde erwarten, dass dies Folgendes enthält tzinfo
.
datetime.datetime.utcnow()
Warum ist das datetime
keine Angaben zur Zeitzone, da es sich ausdrücklich um eine UTC datetime
?
Ich würde erwarten, dass dies Folgendes enthält tzinfo
.
Julien Danjou hat einen guten Artikel geschrieben, der erklärt warum Sie sich nie mit Zeitzonen beschäftigen sollten . Ein Auszug:
In der Tat, Python datetime was sehr unglücklich ist. In der Tat, sobald Sie eines dieser Objekts erhält, gibt es keine Möglichkeit, die Zeitzone zu ermitteln, weshalb diese Objekte für sich genommen ziemlich "nutzlos" sind.
Leider, auch wenn Sie die utcnow()
Wenn Sie diese Option wählen, wird die Zeitzoneninformation immer noch nicht angezeigt, wie Sie festgestellt haben.
Empfehlungen:
Verwenden Sie immer bewusst
datetime
Objekte, d.h. mit Zeitzoneninformationen. Das stellt sicher, dass Sie sie direkt vergleichen können (aware und unawaredatetime
Objekte nicht vergleichbar sind) und gibt sie korrekt an die Benutzer zurück. Hebelwirkung pytz um Zeitzonenobjekte zu haben.Utilisez ISO 8601 a Ausgabe-String-Format. verwenden
datetime.datetime.isoformat()
t Zeitstempel als String zurückgeben, der mit diesem Format formatiert ist, das die Zeitzonen-Informationen enthält.Wenn Sie Zeichenketten mit ISO 8601-formatierten Zeitstempeln parsen müssen, können Sie sich auf
iso8601
die den Zeitstempel zurückgibt Zeitzoneninformationen zurückgibt. Dies macht Zeitstempel direkt vergleichbar.
Das Verhalten von datetime.datetime.utcnow()
Die Rückgabe der UTC-Zeit als naives datetime-Objekt ist offensichtlich problematisch und muss behoben werden. Es kann zu unerwarteten Ergebnissen führen, wenn die lokale Zeitzone Ihres Systems nicht UTC ist, da die datetime-Bibliothek davon ausgeht, dass ein naives datetime-Objekt die lokale Systemzeit darstellt. Zum Beispiel, datetime.datetime.utcnow().timestaamp()
gibt einen Zeitstempel an, der 4 Stunden vor dem korrekten Wert auf meinem Computer liegt. Auch, ab Python 3.6, datetime.astimezone()
kann für naive datetime-Instanzen aufgerufen werden, aber datetime.datetime.utcnow().astimezone(any_timezone)
ergibt ein falsches Ergebnis, es sei denn, die lokale Zeitzone Ihres Systems ist UTC.
Sie sollte Folgendes umfassen und now()
auch. Verwandte Seiten Ausgabe .
So weit, so gut, now()
ist vorzuziehen gegenüber today()
y utcnow()
.
from datetime import datetime, timezone
utc = timezone.utc
date = datetime.now(utc)
print(date) # 2022-04-06 05:40:13.025347+00:00
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.