使用 zoneinfo 将感知日期时间的时区转换为 UTC(从 pytz 迁移)

run*_*ace 3 python timezone datetime zoneinfo

我使用的是Python 3.8,所以我使用https://pypi.org/project/backports.zoneinfo/来获取zoneinfo。Django 不赞成使用,所以我正在执行从到 的pytz更改pytzzoneinfo

有了 pytz 就可以了from pytz import UTCpython 文档从中获取它datetime.timezone.utc(并且这没有localize方法)。

如何执行与此等效的操作: pytz.UTC.localize(my_datetime, is_dst=None) 使用 zoneinfo?

Wol*_*ehn 8

pytz.localize 仅适用于天真的日期时间(没有时区信息的日期时间),所以

import datetime
import pytz
my_datetime = datetime.datetime(2021, 10, 31, 2)
pytz.UTC.localize(my_datetime, is_dst=None)
# -> datetime.datetime(2021, 10, 31, 2, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

相应的无 pytz 构造是

my_datetime.replace(tzinfo=datetime.timezone.utc)
# -> datetime.datetime(2021, 10, 31, 2, 0, tzinfo=datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)

注意:请勿使用my_datetime.astimezone(timezone.utc)因为这将假定 my_datetime 以系统时区表示。