将指定为字符串的时区的日期解析为天真

时间:2016-10-05 12:47:48

标签: python datetime

我很好奇为什么此示例中的时区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执行相同的格式就可以了。

如果不是这样,解析以字符串时区结尾的日期的正确方法是什么?

1 个答案:

答案 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 :时区名称(如果对象天真,则为空字符串)。