2012-11-08 11 views
6

According to the YAML spec, iso8601 dates with timezones should be recognisedPyYAMLは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であり、第二は、「リラックスした」フォーマットであり、例が取ら:しかし、彼らはPyYAMLと3.10を使用して解析しように(ActivePythonの2.7.2.5とWindows 7で)私はナイーブ日付を取得しますYAML仕様から直接)

これは予期された動作ですか、またはPyYamlが正しく動作していませんか?

答えて

6

これはreported bug in PyYAMLです。私はそれが修正されているか、それに取り組んでいるという兆候は見られません。

+0

だから、現在PyYAMLとを使用してタイムゾーンを意識した日付を解析する方法はありませんか?日付を文字列にして、python-dateutilを使って文字列を解析することは可能ですか? –

+0

暗黙のタグ解決を無効にするPyYAML APIに何も表示されません... –

+0

よろしくお願い致します。 –

9

あなたがあなた自身のコンストラクタを提供することができます(ナイーブUTCの日時、UTCが失われたオフセット)デフォルトの動作が気に入らない場合は、次の

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

非常にクールな、これは良い回避策です、ありがとう! –

関連する問題