2012-07-30 17 views
5

मुझे iso8601 टाइमस्टैम्प का प्रतिनिधित्व करने वाले तारों के साथ पायथन में सौदा करना है।पायथन: टाइमस्टैम्प को कैसे संभालें (आईएसओ 8601)

मेरे timestamps स्ट्रिंग निम्नलिखित रूप में इसलिए कर रहे हैं:

timestamp = "2011-08-18T10:29:47+03:00" 

वर्तमान में मैं का उपयोग कर अजगर में उन्हें परिवर्तित कर रहा हूँ:

timestamp = timestamp[:-6] 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S") 

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

delay = timestamp[-6:] 

मैं भी कोशिश की है:

timestamp = "2011-08-18T10:29:47+03:00" 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z") 

लेकिन यह

ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z' 

लौटे आप कुछ जानकारी दे सकते हैं?

+0

आपका मतलब हो सकता है [आरएफसी 3339 (आईएसओ 8601 की प्रोफाइल) में वर्णित इंटरनेट डेट/टाइम प्रारूप] (http://tools.ietf.org/html/rfc3339#section-5.6) – jfs

+0

संबंधित: [आईएसओ से डेटाटाइम ऑब्जेक्ट: 'z' एक बुरा निर्देश है] (http://stackoverflow.com/q/20194496/4279) – jfs

उत्तर

2

python iso8601 मॉड्यूल एक साथ बनाया गया है अद्भुत parse_date विधि है कि समय-क्षेत्र की जानकारी संभाल कर सकते हैं:

>>> import iso8601 
>>> iso8601.parse_date("2007-01-25T12:00:00Z") 
datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>) 

>>> iso8601.parse_date("2011-08-18T10:29:47+03:00") 
datetime.datetime(2011, 8, 18, 10, 29, 47, tzinfo=<FixedOffset '+03:00'>) 

यदि आप किसी अन्य समय क्षेत्र में परिवर्तित करना चाहते हैं, astimezone(tz) विधि का उपयोग

यदि आपको यूटीसी डेटाटाइम प्राप्त करने की आवश्यकता है तो आप utctimetuple() विधि का उपयोग कर सकते हैं।

+0

कूल। क्या आप मुझे बता सकते हैं कि परिणाम को यूटीसी + 0 में कैसे परिवर्तित करें? – user601836

+1

@ user601836: मैंने –

+0

प्राप्त दिनांक को कनवर्ट करने के लिए 2 समाधानों के साथ अपना उत्तर अपडेट किया है, मैं उस लाइब्रेरी का उपयोग करने की अनुशंसा नहीं करता हूं। अंतिम अद्यतन 2007 था, और यह सभी मान्य प्रारूपों को स्वीकार नहीं करता है। – tback

1

आपको एक बाहरी मॉड्यूल जोड़ने की आवश्यकता होगी जो टाइमज़ोन समर्थन प्रदान करे; pytz module आपको आवश्यक टाइमज़ोन डेटाबेस प्रदान करता है।

आप या तो हाथ से समय क्षेत्र पार्स करने के लिए आप के लिए पार्स करने के लिए एक pytz समय क्षेत्र का निर्माण, या zc.iso8601 या iso8601 की तरह एक पैकेज का उपयोग करना होगा:

from zc.iso8601.parse import datetimetz 
datetimetz(timestamp)