2008-10-31 24 views
40

मैं डेटाटाइम या डेट ऑब्जेक्ट को पायथन में पॉज़िक्स टाइमस्टैम्प में कैसे परिवर्तित करूं? टाइमस्टैम्प से डेटाटाइम ऑब्जेक्ट बनाने के तरीके हैं, लेकिन मुझे ऑपरेशन को विपरीत तरीके से करने के लिए कोई स्पष्ट तरीका नहीं दिख रहा है।डेटाटाइम को POSIX समय में कनवर्ट करना

उत्तर

48
import time, datetime 

d = datetime.datetime.now() 
print time.mktime(d.timetuple()) 
+0

धन्यवाद। मुझे पता था कि इसे कुछ बेवकूफ सरल होना था, लेकिन मैं इसे समझ नहीं पाया। –

+0

ऐसा लगता है कि प्लेटफॉर्म के आधार पर, समय में एमकेटाइम विधि नहीं है – Tirno

+5

नोट यह स्थानीय समय देता है, यूटीसी नहीं। यूटीसी के लिए [फिक्समार्क का जवाब] देखें (http://stackoverflow.com/q/5872022/60075)। –

21

यूटीसी गणना के लिए, calendar.timegmtime.gmtime का उल्टा होता है।

import calendar, datetime 
d = datetime.datetime.utcnow() 
print calendar.timegm(d.timetuple()) 
+0

नोट: 'calendar.timegm() 'यूटीसी इनपुट की अपेक्षा करता है लेकिन परिणाम (टाइमस्टैम्प) किसी भी समय क्षेत्र में नहीं है। युग के बाद से बस कुछ सेकंड बीत चुके हैं (== 1 9 6 9-12-31T19: 00: 00-05: 00 (न्यूयॉर्क) == 1970-01-01T00: 00: 00Z (यूटीसी) == 1970-01-01T03: 00: 00 + 03: 00 (मॉस्को)) - समय में एक निश्चित क्षण। – jfs

+0

सुधार: इंटरकैलरी लीप सेकेंड के कारण, "एपोक के बाद से सेकंड" * बीत नहीं गए * एसआई सेकेंड '1 9 70-01-01 00: 00: 00 + 00: 00' के बाद से। ['utc_to_tai()' function] (https://gist.github.com/zed/a912498be36c6a947c33#file-utc_to_tai-py-L25) का उपयोग बीत चुके एसआई सेकेंड की गणना करने के लिए किया जा सकता है। – jfs

4

अजगर में, time.time() एक चल बिन्दु संख्या कि माइक्रोसेकंड के साथ एक दशमलव घटक शामिल के रूप में सेकंड लौट सकते हैं। डेटाटाइम को इस प्रस्तुति में वापस बदलने के लिए, आपको माइक्रोसेकंड घटक जोड़ना होगा क्योंकि प्रत्यक्ष समय सारिणी में इसे शामिल नहीं किया गया है।

import time, datetime 

posix_now = time.time() 

d = datetime.datetime.fromtimestamp(posix_now) 
no_microseconds_time = time.mktime(d.timetuple()) 
has_microseconds_time = time.mktime(d.timetuple()) + d.microsecond * 0.000001 

print posix_now 
print no_microseconds_time 
print has_microseconds_time 
+0

उत्कृष्ट उत्तर – pumazi

+0

एक राउंड-ट्रिप (टीएस -> स्थानीय -> टीएस) के लिए स्थानीय समय का उपयोग न करें। यह डीएसटी संक्रमण के दौरान तोड़ सकता है। आप आसानी से विस्तार कर सकता [timegm()] (http://hg.python.org/cpython/file/3.3/Lib/calendar.py#l597) माइक्रोसेकंड शामिल हैं और ts के लिए इसका इस्तेमाल करने के -> यूटीसी -> ts परिवर्तनों। – jfs

2

ध्यान दें कि अजगर अब (3.5.2) इस के लिए एक built-in methoddatetime वस्तुओं में शामिल हैं:

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> now.timestamp() # Local time 
1509315202.161655 
>>> now.replace(tzinfo=datetime.timezone.utc).timestamp() # UTC 
1509329602.161655 
संबंधित मुद्दे

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