2012-09-17 10 views
36

के युग के बाद से अवधि के बाद निम्नलिखित timestamps है:Convert टाइमस्टैम्प मैं datetime.datetime

Timestamp 
1346114717972 
1354087827000 

मैं कैसे कुछ विशिष्ट उत्पादन प्रारूप करने के लिए इन टाइम स्टांप परिवर्तित कर सकते हैं, उदाहरण के लिए, mm/dd/yyyy hr:min:sec?

मैं उन्हें datetime.datetime में बदलने की कोशिश की है, लेकिन यह विफल रहा है:

>>> datetime.datetime.fromtimestamp(1346114717972) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ValueError: timestamp out of range for platform time_t 

मैं यह कैसे कर सकते हैं?

उत्तर

42

मैं time मॉड्यूल

>>> import time 
>>> time.gmtime(1346114717972/1000.) 
time.struct_time(tm_year=2012, tm_mon=8, tm_mday=28, tm_hour=0, tm_min=45, tm_sec=17, tm_wday=1, tm_yday=241, tm_isdst=0) 

टाइमस्टैम्प टिकटों आपके द्वारा दिए गए के रूप में 1000 से विभाजित किया गया है का प्रयोग करेंगे तो जैसे फ़ॉर्मेट करने के लिए strftime का उपयोग मिलीसेकेंड अवधि के बाद, नहीं सेकंड

में हैं तो

>>> time.strftime('%m/%d/%Y %H:%M:%S', time.gmtime(1346114717972/1000.)) 
'08/28/2012 00:45:17' 
+0

पुhew ... मैं सेकंड्स मान रहा था और मैंने गणना की कि युग के बाद से 42685 साल की तरह कुछ था और मैं सोच रहा था कि कुछ गलत होना चाहिए ... – mgilson

+0

शायद '1000 'के बजाय' 1e3' का उपयोग कर रहा है। बेहतर – zhangxaochen

25

मुझे लगता है कि यह मिलीसेकंद संकल्प है:

import datetime 

s = '1346114717972' 
t = datetime.datetime.fromtimestamp(float(s)/1000.) 

fmt = "%Y-%m-%d %H:%M:%S" 
print t.strftime(fmt) 
# prints 2012-08-28 02:45:17 

इस विशिष्ट मामले में प्रारूप स्ट्रिंग को अनुकूलित करने के लिए पाठक को एक अभ्यास के रूप में छोड़ दिया गया है। strftime() and strptime() behavior के लिए प्रलेखन पर एक नज़र डालें।

+6

ध्यान दें कि यह उत्तर टाइमस्टैम्प को स्थानीय डेटाटाइम में परिवर्तित कर देगा। यदि आप यूटीसी में समतुल्य डेटाटाइम चाहते हैं तो datetime.datetime.fromtimestamp() के बजाय datetime.datetime.utcfromtimestamp() का उपयोग करें। – Marc

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