0

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

使用 pytz 就可以了from pytz import UTCpython 文档datetime.timezone.utc' (and this does not have a localize` 方法获取它)。

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

4

2 回答 2

1

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>)

相应的 pytz-less 结构是

my_datetime.replace(tzinfo=datetime.timezone.utc)
# -> datetime.datetime(2021, 10, 31, 2, 0, tzinfo=datetime.timezone.utc)

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

于 2021-12-09T13:05:56.357 回答
0

@MrFuppes 提供的链接:https ://blog.ganssle.io/articles/2018/03/pytz-fastest-footgun.html 解释说 pytz 及其本地化方法不是标准的。现在有了区域信息,我们可以使用简单的标准 API,而不必担心会在脚下开枪:

pytz.UTC.localize(my_datetime, is_dst=None)

变成

my_datetime.astimezone(timezone.utc)

现在,即使没有 UTC 日期时间,日期算术也可以工作。

于 2021-12-06T19:29:11.573 回答