Zeit Strings addieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Zeit Strings addieren

Beitragvon flyingfish » Dienstag 1. November 2005, 13:51

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
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 1. November 2005, 18:33

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 1. November 2005, 19:09

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.
BlackJack

Beitragvon BlackJack » Dienstag 1. November 2005, 21:20

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 2. November 2005, 09:09

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.
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Beitragvon flyingfish » Mittwoch 2. November 2005, 14:44

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
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Beitragvon flyingfish » Mittwoch 2. November 2005, 14:45

ich habe einfach divmod verwendet und so immer weitergerechnet

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder