2012-11-08 11 views
6

According to the YAML spec, iso8601 dates with timezones should be recognised। हालांकि, (ActivePython 2.7.2.5 के साथ विंडोज 7 पर) उन्हें PyYAML 3.10 का उपयोग कर पार्स करने का प्रयास पर मैं अनुभवहीन दिनांकों मिलती है:क्या PyYAML parse iso8601 तिथियां कर सकते हैं?

In [7]: yaml.load("2001-12-14t21:59:43.10-05:00") 
Out[7]: datetime.datetime(2001, 12, 15, 2, 59, 43, 100000) 

In [8]: yaml.load("2001-12-14 21:59:43.10 -5") 
Out[8]: datetime.datetime(2001, 12, 15, 2, 59, 43, 100000) 

(प्रथम प्रारूप सख्त iso8601 है और दूसरा 'आराम' प्रारूप है, उदाहरण लिया सीधे वाईएएमएल स्पेक से।)

क्या यह अपेक्षित व्यवहार है, या मेरा पाययाम सही तरीके से काम नहीं कर रहा है?

उत्तर

6

यह reported bug in PyYAML है। मुझे कोई संकेत नहीं दिख रहा है कि इसे ठीक किया गया है या काम किया गया है।

+0

तो वहाँ वर्तमान समय क्षेत्र अवगत PyYAML का उपयोग कर दिनांकों को पार्स का कोई रास्ता नहीं है? क्या तारीख को स्ट्रिंग होने के लिए मजबूर करना संभव है और फिर पायथन-डेटुटिल का उपयोग करके स्ट्रिंग को पार्स करना संभव है? –

+0

मुझे PyYAML API में कुछ भी दिखाई नहीं देता है जो आपको अंतर्निहित टैग रिज़ॉल्यूशन को बंद करने देता है ... –

+0

ठीक है, बहुत धन्यवाद। –

9

आप डिफ़ॉल्ट व्यवहार (अनुभवहीन यूटीसी datetime, यूटीसी खो ऑफसेट) आप अपने खुद के निर्माता प्रदान कर सकता है पसंद नहीं है:

import dateutil.parser 
import yaml 

def timestamp_constructor(loader, node): 
    return dateutil.parser.parse(node.value) 
yaml.add_constructor(u'tag:yaml.org,2002:timestamp', timestamp_constructor) 

print(repr(yaml.load("2001-12-14T21:59:43.10-05:00"))) 
# -> datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=tzoffset(None, -18000)) 
+0

बहुत अच्छा, यह एक अच्छा कामकाज है, धन्यवाद! –

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