2010-09-12 5 views
15

Je suis en train de diviser un objet timedelta avec un autre pour calculer un temps de fonctionnement du serveur:Python 2.6.5: Diviser timedelta avec timedelta

>>> import datetime 
>>> installation_date=datetime.datetime(2010,8,01) 
>>> down_time=datetime.timedelta(seconds=1400) 
>>> server_life_period=datetime.datetime.now()-installation_date 
>>> down_time_percentage=down_time/server_life_period 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for /: 'datetime.timedelta' 
      and 'datetime.timedelta' 

Je sais que ce has been solved in Python 3.2, mais est-il un moyen pratique de gérer dans les versions précédentes de Python, en dehors de calculer le nombre de microsecondes, secondes et jours et divisant?

Merci,

Adam

+0

duplication possible de [Comment puis-je effectuer divison sur un datetime.timedelta en python?] (Http://stackoverflow.com/questions/865618/how-can-i-perform-divison-on-a-datetime- timedelta-in-python) –

Répondre

28

En Python ≥2.7, il est a .total_seconds() method pour calculer les secondes totales contenues dans le timedelta:

>>> down_time.total_seconds()/server_life_period.total_seconds() 
0.0003779903727652387 

Sinon, il n'y a pas moyen que de calculer la microsecondes totales (pour les versions < 2,7)

>>> def get_total_seconds(td): return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6)/1e6 
... 
>>> get_total_seconds(down_time)/get_total_seconds(server_life_period) 
0.0003779903727652387 
+0

+1 Super, mais ça ne marcherait pas sur mon 2.6. –

+4

@Adam: La 2ème méthode fonctionne sur 2.6. (Bien sûr, c'est la solution juste "en dehors de".) – kennytm

+0

La deuxième méthode a fonctionné pour moi, merci! –

Questions connexes