我很好奇为什么此示例中的时区GMT
未被解析为有效时区:
>>> from datetime import datetime
>>> import pytz
>>> b = 'Mon, 3 Oct 2016 21:24:17 GMT'
>>> fmt = '%a, %d %b %Y %H:%M:%S %Z'
>>> datetime.strptime(b, fmt).astimezone(pytz.utc)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime
使用-0700
而不是GMT
和%z
而不是%Z
执行相同的格式就可以了。
如果不是这样,解析以字符串时区结尾的日期的正确方法是什么?
答案 0 :(得分:0)
对.replace()
对象使用datetime
方法更新时区信息。
>>> datetime.strptime(b, fmt).replace(tzinfo=pytz.utc)
datetime.datetime(2016, 10, 3, 21, 24, 17, tzinfo=<UTC>)
由于您提到,.astimezone()
在格式字符串中使用的是%Z
而不是%s
。即使格式化中存在z
(仅仅是大小写的差异),但它们在所代表的内容方面完全不同。
根据strftime
的指令文件:
%z :UTC偏移量,格式为+ HHMM或-HHMM(如果对象天真,则为空字符串)。
%Z :时区名称(如果对象天真,则为空字符串)。