Seite 1 von 1

timedelta nach Zeiteinheiten aufteilen

Verfasst: Donnerstag 25. Juni 2009, 11:22
von Zap
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. ;)

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

Verfasst: Donnerstag 25. Juni 2009, 11:37
von ms4py
Auch nicht sehr elegant, aber vielleicht besser?

Code: Alles auswählen

>>> import datetime
>>> dt = datetime.datetime(2010, 1, 1) - datetime.datetime.now()
>>> dt = datetime.datetime(2000, 1, 1) + dt
>>> dt.year - 2000
0
>>> dt.month - 1
6
>>> dt.day - 1
7
>>> dt.hour
11
>>> dt.second
32