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.