如何在Python中获取反向链接时区的规范时区名称?
获取时区别名的规范名称
可以通过两种方式实现:
1. 直接读取tzdata的映射文件
tzdata包中自带一个backward文件,里面记录了所有时区别名与规范名称的对应关系。你可以通过代码定位并解析这个文件:
import zoneinfo import os def get_canonical_zone(alias): # 定位tzdata的存储路径 tz_path = zoneinfo._tzpath[0] backward_file = os.path.join(tz_path, "backward") with open(backward_file, 'r') as f: for line in f: line = line.strip() # 跳过注释和空行 if not line or line.startswith('#'): continue # 解析每行的别名-规范名映射 parts = line.split() if parts[0] == alias: return parts[1] # 未找到对应映射时返回原别名 return alias # 测试示例 print(get_canonical_zone("Asia/Calcutta")) # 输出 Asia/Kolkata
2. 借助ZoneInfo的内部属性(非官方实现,注意版本兼容)
ZoneInfo对象的_info属性包含时区元数据,其中canonical字段直接对应规范名称:
from zoneinfo import ZoneInfo tz = ZoneInfo("Asia/Calcutta") print(tz._info.canonical) # 输出 Asia/Kolkata
注意:这种方法依赖ZoneInfo的内部实现逻辑,Python版本更新可能导致该属性变动,生产环境优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者Junn Sorran
相关产品推荐
相关产品推荐

