1

在 John Skeet关于在存储未来日期时间时处理时区信息的博客文章中,他建议将时区规则的版本与本地时间和时区 ID 一起存储在数据库中。

他的例子:

ID: 1
Name: KindConf
LocalStart: 2022-07-10T09:00:00
Address: Europaplein 24, 1078 GZ Amsterdam, Netherlands
TimeZoneId: Europe/Amsterdam
UtcStart: 2022-07-10T07:00:00Z
TimeZoneRules: 2019a

在python中,如何获取datetime使用的时区规则版本?例如:

date.astimezone(zoneinfo.ZoneInfo('US/Pacific'))
4

1 回答 1

2

获取时区规则的方法取决于用于创建 tzinfo 实例的库。

如果使用 pytz,则使用的时区数据库是 Olson 时区数据库。

import pytz
print(pytz.OLSEN_VERSION)  # e.g. 2021a

使用 zoneinfo 时,默认使用系统的时区数据。

来自文档默认情况下,zoneinfo 使用系统的时区数据(如果可用);如果没有可用的系统时区数据,该库将回退到使用 PyPI 上可用的第一方 tzdata 包。

有两种选择:

  1. 查找特定于平台的获取版本号的方法
  2. 使用 tzdata 库设置 zoneinfo,这使得时区版本号随时可用。

对于选项 2:

要设置 zoneinfo 以忽略系统数据并改用 tzdata 包,请设置环境变量 PYTHONTZPATH=""

IANA 版本号由 tzdata 导出:

import tzdata
print(tzdata.IANA_VERSION). # e.g. 2021e
于 2022-01-22T01:44:14.190 回答