TimezoneFinder获取的America/Ciudad_Juarez时区在pytz中报错
pytz无法识别timezonefinder返回的America/Ciudad_Juarez时区
问题重现
调用TimezoneFinder获取墨西哥华雷斯城机场的时区时,返回America/Ciudad_Juarez,但用pytz加载该时区会触发错误:
from timezonefinder import TimezoneFinder from pytz import timezone tz = TimezoneFinder().timezone_at(lng=-106.48333, lat=31.73333) # 返回 'America/Ciudad_Juarez' timezone(tz)
错误信息:
UnknownTimeZoneError: 'America/Ciudad_Juarez'
原因解析
America/Ciudad_Juarez确实是IANA时区数据库中的标准条目,但pytz项目已停止维护,其内置的时区数据库版本较旧,没有收录这个较新添加的时区。
优雅解决方法
方法1:改用Python内置的zoneinfo(推荐)
Python 3.9及以上版本内置了zoneinfo模块,它直接使用系统或环境中最新的IANA时区数据库,能识别所有新增时区:
from timezonefinder import TimezoneFinder from zoneinfo import ZoneInfo tz_name = TimezoneFinder().timezone_at(lng=-106.48333, lat=31.73333) tz = ZoneInfo(tz_name) # 正常加载America/Ciudad_Juarez
方法2:为pytz添加时区映射(兼容旧代码)
如果必须继续使用pytz,可以手动建立映射表——America/Ciudad_Juarez和America/Denver的时区规则完全一致,可直接替换:
from timezonefinder import TimezoneFinder import pytz # 新增时区与pytz兼容时区的映射表 COMPAT_TZ_MAP = { 'America/Ciudad_Juarez': 'America/Denver' } tz_name = TimezoneFinder().timezone_at(lng=-106.48333, lat=31.73333) # 自动替换为pytz支持的时区 tz_name = COMPAT_TZ_MAP.get(tz_name, tz_name) tz = pytz.timezone(tz_name)
内容的提问来源于stack exchange,提问作者the world is not flat
相关产品推荐
相关产品推荐

