Wir starten mit folgendem Code-Snippet:
|
|
Die offensichtliche Richtung
Ich möchte die Differenz der beiden Zeiten haben, also das Delta dazwischen. Das größere minus das kleinere Datum ergibt genau das was ich erwarte:
|
|
Eigentlich hätte ich einen Tag, $5$ Stunden, $7$ Minuten und $20$ Sekunden erwartet. Aber da $18440$ Sekunden genau $5$ Stunden, $7$ Minuten und $20$ Sekunden ergeben, ist das in Ordnung und korrekt - so wie ich es erwartet habe.
Die nicht-offensichtliche Richtung
Was passiert wenn wir die Differenz umdrehen? Intuitiv hätte ich dann timedelta(days=-1, seconds=-18440)
erwartet. Aber…
|
|
Was passiert?
Nach einigem Nachdenken macht das tatsächlich Sinn: $67960 + 18440 = 86400$, und ein Tag hat gerade $86400$ Sekunden. Wir können das Delta also verstehen als: Zuerst zwei Tage abziehen, und dann $67960$ Sekunden wieder zum Resultat dazuaddieren. Was dann eben das gleiche ist wie zuerst einen Tag abzuziehen und dann noch $18440$ Sekunden abzuziehen.
Gefahr!
Und das könnte potentiell gefährlich werden:
|
|
Bedeutet: Auch wenn ich ein negatives Timedelta habe, können die Sekunden positiv sein! Das muss mir als Entwickler bewusst sein.
Und die finale Lösung
Tatsächlich genügt es aber, die total_seconds()
anzuschauen:
|
|
Damit klappt alles wieder so wie ich es mir vorstelle. Hier ist nur zu beachten, dass die total_seconds()
keine Ganzzahl sein müssen - was Sinn macht, da ich ja eine höhere Präzision haben könnte, und total_seconds()
trotzdem das richtige ergeben sollte.