Ich habe einen Zeitunterschied
time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1
Wie finde ich nun die Gesamtzahl der Sekunden, die vergangen sind? diff.seconds
zählt keine Tage. Ich könnte:
diff.seconds + diff.days * 24 * 3600
Gibt es dafür eine eingebaute Methode?
time1
unddiff
in Ihrem Code. Verwenden Siedatetime.utcnow()
stattdessen, um die aktuelle utc-Zeit als naives datetime-Objekt abzurufen . Um zu verstehen, warum Sie UTC anstelle der Ortszeit verwenden sollten, um den Unterschied zu ermitteln, lesen Sie Suchen, wenn zwischen den Datenzeiten 24 Stunden vergangen sind - Python .time.monotonic()
Es könnte vorzuziehen sein, die zwischen den Ereignissen verstrichene Zeit zu ermitteln (anstelle vontime.time()
oderdatetime.utcnow()
).Antworten:
Verwenden Sie
timedelta.total_seconds()
.quelle
Sie haben auf die eine oder andere Weise ein Problem mit Ihrem
datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
Ausdruck.(1) Wenn Sie nur den Unterschied zwischen zwei Zeitpunkten in Sekunden benötigen,
time.time()
erledigt der sehr einfache Job die Aufgabe.(2) Wenn Sie diese Zeitstempel für andere Zwecke verwenden, müssen Sie überlegen, was Sie tun, da das Ergebnis überall stark riecht:
gmtime()
Gibt ein Zeittupel in UTC zurück ,mktime()
erwartet jedoch ein Zeittupel in der Ortszeit.Ich bin in Melbourne, Australien, wo die Standard-TZ UTC + 10 ist, aber die Sommerzeit ist noch bis morgen früh in Kraft, also ist es UTC + 11. Als ich Folgendes ausführte, war es 2011-04-02T20: 31 Ortszeit hier ... UTC war 2011-04-02T09: 31
Sie werden feststellen, dass t3, das Ergebnis Ihres Ausdrucks, UTC + 1 ist, was UTC + (mein lokaler DST-Unterschied) zu sein scheint ... nicht sehr aussagekräftig. Sie sollten in Betracht ziehen,
datetime.datetime.utcnow()
die zu verwenden, die beim Ein- und Ausschalten der Sommerzeit nicht um eine Stunde springt und möglicherweise präziser ist alstime.time()
quelle
Sie können das Modul mx.DateTime verwenden
quelle