2010-09-12 15 views
15

Tôi đang cố gắng để phân chia một timedelta đối tượng với nhau để tính toán một thời gian hoạt động máy chủ:Python 2.6.5: Divide timedelta với 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' 

Tôi biết has been solved in Python 3.2 này, nhưng là có một cách thuận tiện để xử lý nó trong các phiên bản trước của Python, ngoài việc tính số micro giây, giây và ngày và chia?

Cảm ơn,

Adam

+0

có thể trùng lặp của [Làm thế nào tôi có thể thực hiện divison trên một datetime.timedelta trong python?] (Http://stackoverflow.com/questions/865618/how-can-i-perform-divison-on-a-datetime- timedelta-in-python) –

Trả lời

28

Trong Python ≥2.7, có a .total_seconds() method để tính tổng giây chứa trong timedelta:

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

Nếu không, không có cách nào nhưng để tính toán tổng số micro giây (đối với phiên bản < 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 Tuyệt vời, nhưng nó sẽ không hoạt động trên 2.6 của tôi. –

+4

@Adam: Phương pháp thứ 2 hoạt động trên 2.6. (Tất nhiên nó chỉ là giải pháp "ngoài".) – kennytm

+0

Phương pháp thứ hai làm việc cho tôi, cảm ơn! –