कैसे पूर्णांक टाइमस्टैम्प को पायथन डेटाइम में कनवर्ट करें


188

मेरे पास एक डेटा फ़ाइल है जिसमें "1331856000000" जैसे टाइमस्टैम्प हैं। दुर्भाग्य से, मेरे पास प्रारूप के लिए बहुत सारे दस्तावेज नहीं हैं, इसलिए मुझे यकीन नहीं है कि टाइमस्टैम्प कैसे प्रारूपित होता है। मैंने पायथन के मानक datetime.fromordinal()और datetime.fromtimestamp()कुछ अन्य लोगों की कोशिश की है, लेकिन कुछ भी मेल नहीं खाता। मुझे पूरा यकीन है कि विशेष संख्या वर्तमान तिथि (जैसे 2012-3-16) से मेल खाती है, लेकिन बहुत अधिक नहीं।

मैं इस नंबर को a में कैसे बदलूं datetime?

जवाबों:


328

datetime.datetime.fromtimestamp()यह सही है, सिवाय इसके कि आप संभवतः मील के पत्थर (जैसे जावास्क्रिप्ट) में टाइमस्टैम्प कर रहे हैं, लेकिन fromtimestamp()यूनिक्स टाइमस्टैम्प को सेकंड में पसंद करता है।

इसे ऐसे करें:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

और परिणाम है:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

क्या यह आपके प्रश्न का उत्तर देता है?

संपादित करें : जेएफ सेबस्टियन सही ढंग से करने का सुझाव दिया सच विभाजन का उपयोग द्वारा 1e3(नाव 1000)। अंतर महत्वपूर्ण है, यदि आप सटीक परिणाम प्राप्त करना चाहते हैं, तो इस प्रकार मैंने अपना उत्तर बदल दिया। अंतर पाइथन 2.x के डिफ़ॉल्ट व्यवहार से उत्पन्न होता है, जो हमेशा int( /ऑपरेटर का उपयोग करके ) intको विभाजित करके लौटाता है int(इसे फ्लोर डिवीजन कहा जाता है )। विभाजक 1000( ए int) के साथ 1e3भाजक ( 1000फ्लोट के रूप में प्रतिनिधित्व ) होने के साथ float(1000)या (या 1000.आदि) के स्थान पर, विभाजन सच विभाजन बन जाता है । अजगर 2.x रिटर्न floatजब विभाजित intद्वारा float, floatद्वाराint ,floatद्वाराfloatआदि और जब fromtimestamp()विधि के लिए पारित टाइमस्टैम्प में कुछ भिन्नात्मक भाग होता है , तो इस विधि के परिणाम में उस भिन्नात्मक भाग (माइक्रोसेकंड की संख्या के रूप में) के बारे में भी जानकारी होती है।


13
सच्चे विभाजन का उपयोग करें:/ 1e3
— jfs

@JFSebastian: आप पूरी तरह से सही हैं, मैंने अपना उत्तर संपादित किया है और कुछ स्पष्टीकरण दिया है कि आप सही क्यों हैं। यदि आप स्पष्टीकरण से सहमत नहीं हैं, तो कृपया मुझे बताएं।
— टाडेक

@ मनु-फत्तो: यह वास्तव में मायने नहीं रखता। x * 0.001और x / 1e3दोनों समान हैं, अंतर अंकन और लंबाई में है (मूल एक छोटा है)। कुछ लोगों के लिए यह स्पष्ट हो सकता है कि गुणक व्युत्क्रम संख्या ( 1/x) से गुणा करने के बजाय संख्या से विभाजित करें , जो आपने प्रस्तावित किया था। लेकिन वैकल्पिक दृष्टिकोण का प्रस्ताव करने के लिए धन्यवाद।
— ताडेक

58
यह कार्य खतरनाक है, क्योंकि आप समय-सीमा को ध्यान में रखते हैं। Utcfromtimestamp
— Haim Bender

12
@HaBBender धन्यवाद! मुझे लगता है कि आपकी टिप्पणी अधिक ध्यान देने योग्य है। fromtimestampआपको स्थानीय समय में तारीख और समय utcfromtimestampदेता है और आपको UTC में तारीख और समय देता है।
— यूसॉन्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.