Python 3.9 的 zoneinfo 模块提供内置时区支持,基于 IANA 数据库,无需第三方库即可创建、转换时区并自动处理夏令时。1. 使用 ZoneInfo 绑定时区到 datetime,如 Asia/Shanghai、America/New_York;2. 通过 astimezone 转换时区;3. 支持常见区域/城市命名格式;4. 自动处理 DST 切换,可用 dst() 方法判断夏令时。推荐在 Python 3.9+ 中优先使用 zoneinfo。
Python 3.9 引入了 zoneinfo 模块,作为内置的时区支持方案,无需额外安装第三方库(如 pytz),就能处理国际时区。它基于 IANA 时区数据库,使用简单且与 datetime 配合良好。
1. 基本用法:获取时区并绑定时间
使用 ZoneInfo 类来指定时区,然后将其传入 datetime 的 tzinfo 参数。
创建带有时区的当前时间
beijing_time = datetime.now(ZoneInfo("Asia/Shanghai")) print(beijing_time)
创建某个具体时间并指定时区
ny_time = datetime(2025, 10, 1, 12, 0, 0, tzinfo=ZoneInfo("America/New_York")) print(ny_time)
2. 时区转换:将时间从一个时区转到另一个
只要原始时间包含时区信息,就可以通过 astimezone() 转换为目标时区。
3. 常见时区名称示例
IANA 使用“区域/城市”格式命名时区。常见包括:
-
Asia/Shanghai- 中国标准时间(CST) -
Asia/Tokyo- 日本时间 -
Europe/London- 英国伦敦(自动处理夏令时) -
America/New_York- 美国东部时间(含夏令时) -
UTC- 标准世界时间
4. 处理夏令时(DST)
zoneinfo 自动处理夏令时切换。例如,在美国纽约,3月第二个周日会进入夏令时。
# 演示夏令时前后的时间差异 dt1 = datetime(2025, 3, 12, 1, 30, tzinfo=ZoneInfo("America/New_York")) # 冬令时期间 dt2 = datetime(2025, 3, 12, 3, 30, tzinfo=ZoneInfo("America/New_York")) # 夏令时跳过2点prin
t(dt1) # 正常输出
print(dt2) # 仍合法,系统可识别为 DST 后的时间
如果需要判断是否为夏令时,可用 dst() 方法:
基本上就这些。zoneinfo 让 Python 原生支持丰富、准确的时区操作,推荐在 Python 3.9+ 项目中优先使用它代替 pytz。注意确保系统或 Python 安装附带了时区数据(通常默认包含)。








