Was ist der einfachste Weg, den Unterschied zwischen zwei Zeiten in Python zu finden?

StackOverflow https://stackoverflow.com/questions/51010

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe 2 Zeitwerte, die den Typ haben datetime.time.Ich möchte ihren Unterschied finden.Das Naheliegende ist t1 - t2, aber das funktioniert nicht.Es funktioniert für Objekte des Typs datetime.datetime aber nicht für datetime.time.Was ist also der beste Weg, dies zu tun?

War es hilfreich?

Lösung

Beachten Sie zunächst, dass datetime.time eine Tageszeit ist, unabhängig von einem bestimmten Tag, und dass der Unterschied zwischen zwei beliebigen datetime.time-Werten daher weniger als 24 Stunden beträgt.

Ein Ansatz besteht darin, beide datetime.time-Werte in vergleichbare Werte (z. B. Millisekunden) umzuwandeln und den Unterschied zu ermitteln.

t1, t2 = datetime.time(...), datetime.time(...)

t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond

delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])

Es ist ein wenig lahm, aber es funktioniert.

Andere Tipps

Auch ein bisschen albern, aber Sie könnten versuchen, einen beliebigen Tag auszuwählen und jedes Mal darin einzubetten, indem Sie verwenden datetime.datetime.combine, dann subtrahieren:

>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)

Sie könnten beide in verwandeln Timedelta-Objekte und subtrahieren Sie diese voneinander, um die Überträge auszugleichen.Zum Beispiel:

>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>>  print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00

Negative Zeitdelta-Objekte in Python erhalten ein negatives Tagesfeld, während die anderen Felder positiv sind.Sie könnten vorher prüfen:Der Vergleich funktioniert sowohl für Zeitobjekte als auch für Zeitdeltaobjekte:

>>> dt2 < dt1
True
>>> t2 < t1
True

Python hat pytz (http://pytz.sourceforge.net) Modul, das zur Arithmetik von „Zeit“-Objekten verwendet werden kann.Es kümmert sich auch um DST-Offsets.Die obige Seite enthält eine Reihe von Beispielen, die die Verwendung von Pytz veranschaulichen.

Es scheint, dass dies nicht unterstützt wird, da es keine gute Möglichkeit gäbe, mit Überläufen in datetime.time umzugehen.Ich weiß, dass dies keine direkte Antwort ist, aber vielleicht kann jemand mit mehr Python-Erfahrung als ich dies etwas weiterführen.Weitere Informationen finden Sie hier: http://bugs.python.org/issue3250

Rufen Sie die Zeiten in Millisekunden ab und führen Sie dann die Subtraktion durch.

Environment.TickCount scheint gut zu funktionieren, wenn Sie schnell etwas brauchen.

int start = Environment.TickCount

...Etwas tun()

int elapsedtime = Environment.TickCount – Start

Jon

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top