2017-06-26 10 views
2

Ich versuche, einen Taskmanager mit einer spcefic Zeit & Aufgabe zu erstellen, während das Datum irrelevant ist (tägliche Erholung).Berechne Zeitdelta zwischen zwei datetime.time Instanzen

Ich versuche, den Unterschied zwischen Zeiten zu finden, z.B. timedelta(hours=1):

datetime.time(13,00,00) - datetime.time(14,00,00) 

mit failture beendet:

Traceback (most recent call last): 
File "<input>", line 1, in <module> 
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time' 

während datetime.date(2017,06,26) - datetime.date(2017,06,25) gut endet.

+1

Bitte geben Sie Codebeispiel den Fehler zu demonstrieren. Es muss nicht alles von deinem Code sein, nur etwas, das zeigt, warum es nicht funktioniert hat. – tdelaney

+0

Wollen Sie den Unterschied zwischen den beiden Daten oder möchten Sie nur wissen, welches Datum größer oder niedriger ist? –

+0

Was ist das erwartete Ergebnis von "13:00 minus 14:00"? – deceze

Antwort

4

Das Python-Modul datetime ermöglicht keine Berechnung von Zeitdeltas nur basierend auf der Tageszeit. Das kann Unklarheiten zur Folge haben, beispielsweise was zu tun ist, wenn eine Summe länger als 24 Stunden ist. In deinem Fall gibt es einen Hack, der funktionieren sollte. Machen Sie Ihre Zeiten am selben Tag in datetime und machen Sie die Mathematik von dort.

>>> def time_diff(t1, t2): 
...  today = datetime.date.today() 
...  return (datetime.datetime.combine(today, t1) 
...   - datetime.datetime.combine(today, t2)) 
... 
>>> 
>>> time_diff(datetime.time(13,0,0), datetime.time(14,0,0)) 
datetime.timedelta(-1, 82800) 

Negative timedelta sieht seltsam (also -1 Tage plus 82.800 Sekunden), sollte aber in anderen Berechnungen arbeiten.

+0

gut ... deshalb war Timestamp nicht genug. ** Danke ** –

+0

Beim Ausführen in PyCharm (Skript enthält nur time_diff oben) ist die Antwort '0: 05: 00' läuft die gleiche time_diff auf Python-Konsole (Teil von PyCharm), Antwort ist' datetime.timedelta (0, 300) ' Warum der Unterschied? wichtiger - wie bekomme ich die Antwort (Restzeit) in Sekunden? –

1

Um eine Antwort in Sekunden, ändern Sie den Code wie folgt zu erhalten:

return (datetime.datetime.combine(today, t1)-datetime.datetime.combine(today, t2)).total_seconds() 
+0

Dies bietet keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/17366728) – geisterfurz007

Verwandte Themen