3
>>> 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'

我知道它不受支持,但不知道为什么。似乎支持这一点并不难。并且“从 UTC 偏移”并不像时区缩写那样模棱两可。

4

2 回答 2

5

在 Python 3.2 之前,Python 的datetime模块没有timezone()object。它支持通过提供datetime.tzinfo()抽象基类来提供时区的 3rd-party 库,但不包含时区对象。如果没有时区对象,也不支持解析时区偏移量。

从 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))
于 2014-05-29T18:43:30.880 回答
0

这是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
于 2016-08-17T09:23:55.280 回答