WMX · 随记
·Python· 3 分钟阅读

zoneinfo:保存事件时刻,展示地区时间

服务器与用户不在同一个时区时,直接展示无时区 datetime 会产生歧义。事件记录需要能明确定位到时间线上的一点。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

服务器与用户不在同一个时区时,直接展示无时区 datetime 会产生歧义。事件记录需要能明确定位到时间线上的一点。

理解核心机制

带时区 datetime 可以通过 astimezone 转换显示地区。ZoneInfo 使用地区规则而不只是固定偏移;夏令时切换附近还需要理解重复时间与 fold。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python7 行 · 可横向滚动
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
event = datetime(2026, 1, 1, tzinfo=timezone.utc)
local = event.astimezone(ZoneInfo("Asia/Shanghai"))
assert local.hour == 8
assert local.timestamp() == event.timestamp()
print(local.isoformat())

适用边界与常见误区

系统需要可用的时区数据库。给无时区对象直接 replace(tzinfo=...) 是附加解释,不是时间转换;对未知来源的本地时间不能这样猜测时区。

继续练习

比较同一个时刻在两个地区的 ISO 文本和 timestamp,再测试具有夏令时的地区,记录重复当地时间如何消歧。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档