2010-03-25 14 views
15

मैं सभी नेट पर खोज कर दिया गया है और इस मुद्देपायथन | mktime अतिप्रवाह त्रुटि

OverflowError: mktime argument out of range 

कोड है कि इस अपवाद

t = (1956, 3, 2, 0, 0, 0, 0, 0, 0) 
ser = time.mktime(t) 

मैं जानना चाहूंगा का कारण बनता है के लिए एक उपयुक्त समाधान नहीं मिल सकता है इस अपवाद के लिए वास्तविक कारण, कुछ कहते हैं कि तिथि वैध सीमा में नहीं है, लेकिन इससे मुझे कोई समझ नहीं आती है, और यदि कोई सीमा है तो यह क्या हो सकता है। क्या यह उस प्रणाली पर निर्भर करता है जिसका हम उपयोग कर रहे हैं। इस मुद्दे के लिए भी एक अच्छा समाधान जानना चाहते हैं।

धन्यवाद।

उत्तर

19

time.mktime प्लेटफ़ॉर्म की सी लाइब्रेरी से अंतर्निहित mktime फ़ंक्शन को कॉल करता है। उदाहरण के लिए, आपके द्वारा पोस्ट किया गया उपरोक्त कोड मैक ओएस एक्स पर मेरे लिए पूरी तरह से अच्छा काम करता है, हालांकि यह एक नकारात्मक संख्या देता है क्योंकि तिथि यूनिक्स युग से पहले है। तो कारण यह है कि आपके प्लेटफ़ॉर्म का mktime कार्यान्वयन शायद यूनिक्स युग से पहले तिथियों का समर्थन नहीं करता है। आप एक datetime वस्तु के ऊपर तिथि करने के लिए इसी के निर्माण के लिए पायथन के datetime मॉड्यूल का उपयोग कर सकते हैं एक और datetime उद्देश्य यह है कि यूनिक्स काल का प्रतिनिधित्व करता है से घटा दें और गणना की timedelta वस्तु का उपयोग अवधि के बाद सेकंड की संख्या प्राप्त करने के लिए:

from datetime import datetime 
epoch = datetime(1970, 1, 1) 
t = datetime(1956, 3, 2) 
diff = t-epoch 
print diff.days * 24 * 3600 + diff.seconds 

अद्यतन: यदि आप पाइथन 2.7 या ऊपर का उपयोग कर रहे हैं, तो आप चाड मिलर की टिप्पणी में नीचे उल्लिखित print diff.total_seconds() का उपयोग कर सकते हैं।

+1

प्रिंट diff.total_seconds() –

+0

धन्यवाद, मैंने अपना जवाब अपडेट कर दिया है। 2010 में पायथन 2.5 और 2.6 कहीं अधिक प्रचलित थे जब मैंने यह उत्तर जोड़ा और 'total_seconds()' 2.7 से आगे उपलब्ध है। –

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