2010-09-12 6 views
15

मैं कोशिश कर रहा हूँ के साथ फूट डालो timedelta दूसरे के साथ एक timedelta वस्तु विभाजित करने के लिए एक सर्वर सक्रिय रहने की अवधि की गणना करने के:अजगर 2.6.5: 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' 

मैं इस has been solved in Python 3.2 पता है, लेकिन वहाँ इसे संभाल करने के लिए एक सुविधाजनक तरीका है पाइथन के पूर्व संस्करणों में, माइक्रोसॉन्ड, सेकंड और दिन की संख्या और विभाजन की गणना करने के अलावा?

धन्यवाद,

एडम

+0

संभावित डुप्लिकेट [मैं पाइथन में डेटाटाइम.timedelta पर divison कैसे कर सकता हूं?] (Http://stackoverflow.com/questions/865618/how-can-i-perform-divison-on-a-datetime- timedelta-in-python) –

उत्तर

28

अजगर में ≥2.7, वहाँ है a .total_seconds() method timedelta में निहित कुल सेकंड गणना करने के लिए:

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

अन्यथा, वहाँ कोई रास्ता नहीं है लेकिन गणना करने के लिए है कुल माइक्रोसॉन्ड (संस्करण < 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 ग्रेट, लेकिन यह मेरे 2.6 पर काम नहीं करेगा। –

+4

@Adam: दूसरी विधि 2.6 पर काम करती है। (बेशक यह सिर्फ "समाधान के अलावा" है।) – kennytm

+0

दूसरी विधि मेरे लिए काम करती है, धन्यवाद! –