2010-09-12 16 views
15

Estoy tratando de dividir un objeto con otro timedelta para calcular un tiempo de actividad del servidor:Python 2.6.5: timedelta Divide con 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' 

Sé que esto has been solved in Python 3.2, pero hay una manera conveniente para manejarlo en versiones anteriores de Python, además de calcular el número de microsegundos, segundos y días y dividir?

Gracias,

Adam

+0

posible duplicado de [¿Cómo puedo realizar una división en un datetime.timedelta en python?] (Http://stackoverflow.com/questions/865618/how-can-i-perform-divison-on-a-datetime- timedelta-in-python) –

Respuesta

28

En Python ≥2.7, hay a .total_seconds() method para calcular los segundos totales contenidos en el timedelta:

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

De lo contrario, no hay manera, pero para calcular la total de microsegundos (para las versiones < 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 Genial, pero no funcionaría en mi 2.6. –

+4

@ Adam: El segundo método funciona en 2.6. (Por supuesto, es la solución "aparte de" justa). – kennytm

+0

El segundo método funcionó para mí, ¡gracias! –

Cuestiones relacionadas