Python使用zoneinfo替代pytz 实现pytz.UTC.localize等效功能
等效实现方案
由于UTC时区不存在夏令时切换,没有时间歧义或无效的情况,你可以直接用datetime.replace方法实现完全等效的效果,写法如下:
from datetime import timezone # 完全等效于 pytz.UTC.localize(my_datetime, is_dst=None) utc_datetime = my_datetime.replace(tzinfo=timezone.utc)
完全复刻pytz校验逻辑(可选)
如果你需要和pytz.UTC.localize的行为完全一致(比如输入的my_datetime已经带有时区时抛出错误),可以额外增加校验逻辑:
if my_datetime.tzinfo is not None: raise ValueError("Not naive datetime (tzinfo is already set)") utc_datetime = my_datetime.replace(tzinfo=timezone.utc)
补充说明
datetime.timezone.utc是Python3.2及以上版本标准库自带的对象,不需要依赖backports.zoneinfo包就可以直接使用。- 如果后续需要迁移其他有时区的
pytz.localize调用,Python3.8环境可以先安装backports.zoneinfo包,再通过from backports.zoneinfo import ZoneInfo导入对应时区做适配即可。
内容的提问来源于stack exchange,提问作者run_the_race
相关产品推荐
相关产品推荐

