>>> datetime.strptime('2014-02-13 11:55:00 -0800', '%Y-%m-%d %H:%M:%S %z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/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-%d %H:%M:%S %z'
据我所知,它不支持,但不知道为什么。看来这并不难支持。而“Offset from UTC”并不像时区缩写模棱两可。
直到的Python 3.2,Python的datetime
模块没有timezone()
对象。它支持的第三方库提供的时区提供了一个datetime.tzinfo()
abstract base class,但没有包括时区对象。如果没有一个时区对象,解析时区不支持任何偏移。
对于Python 3.2,z
被支持,因为该版本(及以上)增加了一个datetime.timezone()
type:
>>> import datetime
>>> datetime.datetime.strptime('2014-02-13 11:55:00 -0800', '%Y-%m-%d %H:%M:%S %z')
datetime.datetime(2014, 2, 13, 11, 55, tzinfo=datetime.timezone(datetime.timedelta(-1, 57600)))
>>> _.tzinfo
datetime.timezone(datetime.timedelta(-1, 57600))
下面是Python 2.7版修复
而不是使用:
datetime.strptime(t,'%Y-%m-%dT%H:%M %z')
使用timedelta
占了时区,如下所示:
from datetime import datetime,timedelta
def dt_parse(t):
ret = datetime.strptime(t[0:16],'%Y-%m-%dT%H:%M')
if t[18]=='+':
ret+=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
elif t[18]=='-':
ret-=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
return ret