pytz - 将UTC时间和时区转换为本地时间
问题的出现原因是utc_time对象不包含时区信息,所以无法直接使用astimezone函数进行时区转换。解决方法是使用pytz库中的localize函数将utc_time对象转换为包含时区信息的datetime对象,然后再使用astimezone函数进行时区调整。
具体的解决方法如下所示:
pytz.utc.localize(utc_time, is_dst=None).astimezone(tz)
这行代码首先将不包含时区信息的utc_time对象转换为包含时区信息的datetime对象(时区为UTC),然后使用astimezone函数根据所需的时区进行时间调整。
需要注意的是,如果时区为UTC,可以直接使用replace函数进行时区转换,不需要使用localize函数。如果仍然使用localize函数,则需要在表达式周围添加tz.normalize()函数调用(如果源时区不是UTC可能需要这样做)。
另外,replace函数不会进行时间偏移,只会添加时区信息。
在几乎五年前的问题中,并没有使用utcfromtimestamp函数。另外,datetime.datetime.utcnow()函数会将tzinfo设置为None。
根据测试结果,localize函数的性能比replace函数慢约7%(replace函数也是文档中的示例)。
可以使用fromutc函数进行时区转换(参见's answer'的回答)。
出现的原因:
问题是由于需要将UTC时间和时区转换为本地时间,但是使用astimezone
函数进行转换时会先转换为UTC时间,这在这种情况下是不必要的。
解决方法:
使用fromutc
函数可以直接将UTC时间转换为本地时间,而不需要先转换为UTC时间。
整理后的文章:
这是fromutc
函数的确切目的:
tz.fromutc(utc_time)
(astimezone
函数在幕后调用fromutc
,但在您的情况下尝试先转换为UTC是不必要的)