Python zoneinfo模块无法识别CT、CST等北美时区的问题咨询
解决zoneinfo不支持CT/CST/PST等时区缩写的问题
问题原因
IANA时区数据库不推荐依赖时区缩写,因为多数缩写存在歧义(比如CST可指代北美中部标准时间、中国标准时间、古巴标准时间),仅收录了少数无歧义的缩写(如MST、CET)。CT、CST、PST这类缩写要么歧义性强,要么不属于IANA规范的标准标识符,因此zoneinfo无法直接识别。另外,是否能识别部分缩写确实受操作系统时区数据影响,但跨平台不可靠,本质还是IANA的规范限制。
解决方案
1. 使用标准IANA时区标识符(推荐)
这是最可靠的方式,完整的时区ID会自动处理夏令时/标准时的切换,比如:
- 北美中部时间(覆盖CT/CST/CDT):
America/Chicago - 北美太平洋时间(覆盖PST/PDT):
America/Los_Angeles
代码示例:
from zoneinfo import ZoneInfo # 北美中部时区 central_tz = ZoneInfo("America/Chicago") # 北美太平洋时区 pacific_tz = ZoneInfo("America/Los_Angeles")
2. 自定义缩写映射(如需兼容缩写)
如果必须支持CT/CST/PST这类缩写,可以自己维护一个映射字典,根据业务需求将缩写关联到对应的标准时区ID:
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError # 根据业务需求定义映射,注意区分歧义缩写(比如CST若指中国时区则用"Asia/Shanghai") TZ_ABBREV_MAP = { "CT": "America/Chicago", "CST": "America/Chicago", "PST": "America/Los_Angeles" } def get_tz_from_abbrev(abbrev): try: return ZoneInfo(abbrev) except ZoneInfoNotFoundError: if abbrev in TZ_ABBREV_MAP: return ZoneInfo(TZ_ABBREV_MAP[abbrev]) # 若没有对应映射,抛出原异常或自定义处理 raise # 使用示例 ct_tz = get_tz_from_abbrev("CT") pst_tz = get_tz_from_abbrev("PST")
内容的提问来源于stack exchange,提问作者Flimm
相关产品推荐
相关产品推荐

