2011-07-19 25 views
55

नीचे दिए गए पायथन कोड को देखते हुए, कृपया मुझे समझने में सहायता करें कि वहां क्या हो रहा है।timedelta को समझना

start_time = time.time() 
time.sleep(42) 
end_time = time.time() 

uptime = end_time - start_time 

human_uptime = str(datetime.timedelta(seconds=int(uptime))) 

तो मैं start time और end time के बीच का अंतर हो, लाइन 5 पर मैं कास्टिंग द्वारा अवधि को ख़त्म कर और अब क्या, क्या अधिक विवरण है?

मैं क्या डेल्टा का अर्थ है (औसत या अंतर) पता है, लेकिन मैं क्यों timedelta को seconds = uptime पारित करने के लिए क्या है और क्यों स्ट्रिंग कास्टिंग इतनी अच्छी तरह से है कि मैं HH:MM:SS मिल काम करता है?

उत्तर

74

क्योंकि timedelta तरह परिभाषित किया गया है:

class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks]) 

All arguments are optional and default to 0. 

आप आसानी से कह सकते हैं "तीन दिन और चार मिलीसेकेंड" वैकल्पिक तर्क है कि जिस तरह से साथ।

>>> datetime.timedelta(days=3, milliseconds=4) 
datetime.timedelta(3, 0, 4000) 
>>> datetime.timedelta(3, 0, 0, 4) #no need for that. 
datetime.timedelta(3, 0, 4000) 

और str कास्टिंग के लिए, यह __repr__ के बजाय एक अच्छा स्वरूपित मान देता है। पठनीयता में सुधार के लिए। डॉक्स से:

str (टी) के रूप में एक स्ट्रिंग रिटर्न [डी दिन [एस],] [एच] एच: MM: SS [.UUUUUU], जहां डी नकारात्मक टी के लिए नकारात्मक है। (5)

>>> datetime.timedelta(seconds = 42).__repr__() 
'datetime.timedelta(0, 42)' 
>>> datetime.timedelta(seconds = 42).__str__() 
'0:00:42' 

चेकआउट प्रलेखन:

http://docs.python.org/library/datetime.html#timedelta-objects

10

क्यों तो तुम क्या आप में से गुजर रहे हैं (निर्दिष्ट करने की आवश्यकता मैं timedelta

सेकंड पारित करने के लिए = अपटाइम timedelta वस्तुओं सेकंड, मिलीसेकंड, दिन, आदि पारित किया जा सकता क्योंकि है ... यही कारण है कि आप स्पष्ट कुंजी का उपयोग करते हैं)। int पर टाइपकास्टिंग अनिवार्य है क्योंकि वे फ्लोट स्वीकार भी कर सकते हैं।

और स्ट्रिंग कास्टिंग इतनी अच्छी तरह से क्यों काम करता है कि मुझे एचएच मिलता है: एमएम: एसएस?

यह प्रारूपों का टाइपकास्टिंग नहीं है, वस्तु का आंतरिक __str__ विधि है। वास्तव में आप एक ही परिणाम प्राप्त होगा यदि आप लिखना:

print datetime.timedelta(seconds=int(uptime)) 
+1

आप इस में संकेत है, लेकिन यह स्पष्ट रूप से यह देखते हुए कि timedelta एचएच में प्रदर्शन चीजों तुलना में बहुत अधिक करता है लायक है: MM: SS प्रारूप। जब भी आपको दो डेटाटाइम ऑब्जेक्ट्स के बीच अंतर करने की आवश्यकता होती है तो टाइमडेल्टा ऑब्जेक्ट का उपयोग किया जाता है। – Wilduck

+1

यह '__repr__' विधि नहीं है, यह' __str__' विधि है। – utdemir

+1

timedelta के '__repr __()' नहीं, लेकिन इसकी '__str __()' विधि। आपके लिए 'प्रिंट' कॉल '__str() __'। – bgporter

संबंधित मुद्दे