2010-09-12 9 views
15

Sto cercando di dividere una timedelta oggetto con un altro per calcolare un uptime del server: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' 

So che questo has been solved in Python 3.2, ma c'è un modo conveniente per gestire la cosa nelle versioni precedenti di Python, oltre al calcolo del numero di microsecondi, secondi e giorni e dividendo?

Grazie,

Adam

+0

possibile duplicato di [Come posso eseguire la divisione su un datetime.timedelta in python?] (Http://stackoverflow.com/questions/865618/how-can-i-perform-divison-on-a-datetime- timedelta-in-python) –

risposta

28

In Python ≥2.7, c'è a .total_seconds() method di calcolare i secondi totali contenuti nel timedelta:

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

Altrimenti, non c'è modo ma per calcolare la microsecondi totali (per le versioni < 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 Ottimo, ma non funzionerebbe con il mio 2.6. –

+4

@Adam: il 2o metodo funziona su 2.6. (Ovviamente è la soluzione giusta "a parte".) – kennytm

+0

Il secondo metodo ha funzionato per me, grazie! –

Problemi correlati