timedelta nach Zeiteinheiten aufteilen
Verfasst: Donnerstag 25. Juni 2009, 11:22
Ich hab das Gefühl, dass ich es mir kompliziert mache, aber irgendwie will mir kein generischer Weg einfallen um die Daten eines timedelta Objekts in ihre Zeiteinheiten aufzuteilen.
Die Aufteilung in Jahre hab ich direkt raus gelassen um so Dingen wie Schaltjahren usw. aus dem Weg zu gehen.
Vielleicht hat ja jemand Lust und Zeit mir zu zeigen wie es besser geht.
Vielleicht gibt es auch schon was fertiges in den builtins was ich bisher nicht kenne.
Die Aufteilung in Jahre hab ich direkt raus gelassen um so Dingen wie Schaltjahren usw. aus dem Weg zu gehen.

Code: Alles auswählen
from operator import mul
from datetime import datetime, timedelta
def extract_timeparts(dt):
"""
extract the values for days, hours, seconds, milli- and microseconds
as dict from a timedelta like object
"""
infos = {"days" : dt.days,
"milliseconds" : dt.microseconds / 1000,
"microseconds" : dt.microseconds % 1000}
factors = [60, 60, 1]
rest = dt.seconds
for i, name in enumerate(("hours", "minutes", "seconds")):
factor = reduce(mul, factors[i:])
infos[name] = rest / factor
rest -= (infos[name] * factor)
return infos
print ("Dieses Jahr hat noch %(days)s Tage, %(hours)s Stunden, "
"%(minutes)s Minuten, %(seconds)s Sekunden, %(milliseconds)s "
"Millisekunden und %(microseconds)s Millionstelsekunden."
) % extract_timeparts(datetime(2010, 1, 1) - datetime.now())
Vielleicht gibt es auch schon was fertiges in den builtins was ich bisher nicht kenne.