Seite 1 von 1

Zeit Strings addieren

Verfasst: Dienstag 1. November 2005, 13:51
von flyingfish
Hallo,

ich habe Strings die folgendermassen aussehen:
z.b. : 12:22.20
dh.h 12 minuten, 22 sekunden und 20 Hundertstel.

Wie kann ich diese Strings richtig addieren?

Danke,

flyingfish

Verfasst: Dienstag 1. November 2005, 18:33
von jens
Schau dich mal bei http://www.python.org/doc/current/lib/module-time.html um...
Ich würde mit strptime() die Zeit umwandeln, dann addieren und mit strftime() wieder in deinem Format bringen...

Verfasst: Dienstag 1. November 2005, 19:09
von gerold
jens hat geschrieben:Ich würde mit strptime() die Zeit umwandeln, dann addieren und mit strftime() wieder in deinem Format bringen...
Hi!

Es gibt da auch noch timedelta aus dem datetime-modul. Wobei ich aber nicht verstehe, warum man nur Microseconds, Seconds und Days zurück bekommt. Wo sind die Minuten und Stunden geblieben?

Code: Alles auswählen

import datetime
td1 = datetime.timedelta(minutes = 12, seconds = 22, milliseconds = 20)
td2 = datetime.timedelta(minutes = 10, seconds = 20, milliseconds = 30)
td3 = td1 + td2
Oder du suchst dir einen gemeinsamen Nenner wie z.B. Sekunden, rechnest alles zuerst nach Sekunden um und nachdem alles zusammengezählt wurde, wieder zurück.

mfg
Gerold
:-)

Verfasst: Dienstag 1. November 2005, 21:20
von BlackJack
gerold hat geschrieben:Es gibt da auch noch timedelta aus dem datetime-modul. Wobei ich aber nicht verstehe, warum man nur Microseconds, Seconds und Days zurück bekommt. Wo sind die Minuten und Stunden geblieben?
Die Minuten und Stunden sind zu Sekunden geworden, bzw. teilweise zu Tagen wenn genug Sekunden für einen Tag zusammenkommen. Irgendwie muss man ja normalisieren wenn man damit weiterrechnen will. Ich nehme mal an, das war eine Entwurfsentscheidung die Zeitdifferenz so auf drei Werte zu verteilen. Nur Mikrosekunden oder Sekunden wird vielleicht zu gross zum Rechnen.

Verfasst: Mittwoch 2. November 2005, 09:09
von gerold
BlackJack hat geschrieben:
gerold hat geschrieben:Es gibt da auch noch timedelta aus dem datetime-modul. Wobei ich aber nicht verstehe, warum man nur Microseconds, Seconds und Days zurück bekommt. Wo sind die Minuten und Stunden geblieben?
irgendwie muss man ja normalisieren wenn man damit weiterrechnen will.
Hi BlackJack!

Das ist es ja auch nicht, was ich nicht verstehe. Mich beschäftigt mehr, warum man keine Funktion eingebaut hat, die das Timedelta wieder zerlegt.

Jetzt muss ich nach dem Rechnen doch wieder aus den Sekunden die darin enthaltenen Stunden und Minuten herausrechen, denn meistens braucht man als Ergebnis ja so etwas wie "30 Tage, 15 Stunden, 10 Minuten, ...".

Gibt es eine Funktion, die das erledigt, oder muss ich wie gewohnt, zuerst aus den Sekunden die Stunden raus rechnen und aus dem Rest die Minuten?

Code: Alles auswählen

>>> from datetime import timedelta
>>> d1 = timedelta(hours = 20, minutes = 50)
>>> d2 = timedelta(hours = 20, minutes = 40)
>>> d3 = d1 + d2
>>> str(d1)
   '20:50:00'
>>> str(d2)
   '20:40:00'
>>> str(d3)
   '1 day, 17:30:00'
Auch die Umwandlung mit "str" gibt nichts her, da sich je nach Werten im Timedelta die Länge und die Trennzeichen unterscheiden. Da die richtigen Werte herausparsen ist umständlicher als die Umrechnung von Sekunden in Stunden und Minuten. :(

Code: Alles auswählen

>>> sec = d3.seconds
>>> days = d3.days
>>> hours = sec // (60 * 60)
>>> minutes = (sec - (hours * 60 * 60)) // 60
>>> seconds = sec - (hours * 60 * 60) - (minutes * 60)
>>> milliseconds = d3.microseconds / 1000
Oder gibt es vielleicht doch ein eingebautes Modul oder eine Funktion, die so etwas bereits kann?

lg
Gerold
:-)

Verfasst: Mittwoch 2. November 2005, 14:44
von flyingfish
Ja Gerold, genau das war meine Frage. Ich dachte auch, dass es fuer sowas eine Funktion gibt.
Aber ich sehe, ihr löst es ähnlich wie ich.
Habe auch alles auf Sekunden/Millisekunden heruntergerechnet und dann addiert und wieder zurückgerechnet.

Gruss,

Flyingfish

Verfasst: Mittwoch 2. November 2005, 14:45
von flyingfish
ich habe einfach divmod verwendet und so immer weitergerechnet