Python datetime.strptime,ISO 8601

时间:2015-05-15 20:00:57

标签: python python-2.7 datetime python-3.x iso

假设我有以下日期时间对象:

>>> dt
datetime.datetime(2015, 5, 13, 18, 5, 55, 320000, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))

我可以像ISO 8601那样打印该对象:

>>> dt.isoformat()
'2015-05-13T18:05:55.320000-07:00'

在Python 3.4下,如果删除时区中的冒号,我可以解析ISO 8601字符串的字符串:

>>> import re
>>> ts='2015-05-13T18:05:55.320-07:00'
>>> tf="%Y-%m-%dT%H:%M:%S.%f%z"
>>> tsm=re.sub(r'([+-]\d+):(\d+)$', r'\1\2', '2015-05-13T18:05:55.320-07:00')
>>> tsm
'2015-05-13T18:05:55.320-0700'
>>> datetime.datetime.strptime(tsm, tf)
datetime.datetime(2015, 5, 13, 18, 5, 55, 320000, tzinfo=datetime.timezone(datetime.timedelta(-1, 61200)))

在Python 2.7下,情况更糟,因为%z似乎不起作用as documented

>>> tsm='2015-05-13T18:05:55.320-0700'
>>> tf="%Y-%m-%dT%H:%M:%S.%f%z"
>>> datetime.datetime.strptime(tsm, tf)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
    (bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'

请注意,它与在Python 3.4下工作的格式字符串相同。

问题:除了使用dateutil(效果很好)之外,是否有合理的方法使用datetime.strptime或标准库中的其他内容解析ISO 8601日期字符串?

0 个答案:

没有答案