2008-09-09 13 views

Antwort

-2

Erstens beachten Sie, dass eine datetime.time eine Tageszeit, unabhängig von einem bestimmten Tag, und so der Unterschied zwischen zwei beliebigen Datumzeit .time Werte werden weniger als 24 Stunden sein.

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

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.

+0

Beachten Sie, dass diese Lösung das Vorzeichen nicht bewahrt. Auch ist delta_ms = abs (t1_ms - t2_ms) ein wenig einfacher zu verstehen und speichert mindestens eine Subtraktion. –

+2

funktioniert nicht, wenn t1_ms ist vor Mitternacht und t2_ms ist nach Mitternacht –

+0

Sollte es nicht * 1000000 sein? Seit 1 s = 1000000 μs. – Paggas

1

Es scheint, dass dies nicht unterstützt wird, da es keinen guten Weg geben würde, mit Überläufen in datetime.time umzugehen. Ich weiß, das ist keine direkte Antwort, aber vielleicht kann jemand mit mehr Python-Erfahrung als ich das ein wenig weiter bringen. Weitere Informationen finden Sie unter: http://bugs.python.org/issue3250

5

Sie könnten beide in timedelta objects transformieren und diese voneinander subtrahieren, was sich um die Übertragungen kümmern wird. 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 Timedelta Objekte in Python einen negativen Tag Feld bekommen, mit den anderen Bereichen positiv. Sie könnten vorher überprüfen: Vergleich funktioniert sowohl auf Zeitobjekte und Objekte Timedelta:

>>> dt2 < dt1 
True 
>>> t2 < t1 
True 
+2

Chryss: Sie ernsthaft mit einem Beispiel gut tun könnte Hier. – Arafangion

16

auch ein wenig albern, aber man könnte einen beliebigen Tag versuchen, Kommissionierung und jedes Mal darin einbetten, mit 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) 
3

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

+0

es macht keinen Sinn, über Zeitzonen zu sprechen, die nur Zeit kennen, ohne auch ein * Datum * anzugeben. Wenn Sie sowohl Datum als auch Uhrzeit kennen, können [mehrere Definitionen für eine Differenz verwendet werden] (http://stackoverflow.com/a/25427822/4279) – jfs

-1

Abrufen der Zeiten in Millisekunden und dann die Subtraktion.

-3

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

int start = Environment.TickCount

... DoSomething()

int elapsedtime = Environment.TickCount - Start

Jon