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
Zeit Strings addieren
-
- User
- Beiträge: 33
- Registriert: Sonntag 23. Januar 2005, 23:36
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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...
Ich würde mit strptime() die Zeit umwandeln, dann addieren und mit strftime() wieder in deinem Format bringen...
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
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

Zuletzt geändert von gerold am Montag 16. Januar 2006, 10:11, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
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

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 33
- Registriert: Sonntag 23. Januar 2005, 23:36
-
- User
- Beiträge: 33
- Registriert: Sonntag 23. Januar 2005, 23:36
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder