如何用Python根据经纬度获取特定格式的时区(如EST)
解决方案:将时区标识符转换为友好名称/缩写
要把timezonefinder返回的America/New_York这类标识符转换成Eastern/EST/Eastern Standard Time格式,无需手动维护映射字典,直接用Python的时区库(zoneinfo 或 pytz)即可高效实现。
方法1:使用Python3.9+内置的zoneinfo
无需额外安装依赖,直接利用内置库处理时区转换:
from timezonefinder import TimezoneFinder from zoneinfo import ZoneInfo import datetime tf = TimezoneFinder() # 获取原始时区标识符 tz_id1 = tf.timezone_at(lat=40.4467, lng=-80.0158) tz_id2 = tf.timezone_at(lat=39.7439, lng=-105.02) tz_id3 = tf.timezone_at(lat=37.403, lng=-121.97) def parse_timezone(tz_id): if not tz_id: return None tz = ZoneInfo(tz_id) now = datetime.datetime.now(tz) current_abbr = now.tzname() # 提取标准时区全称(自动替换夏令时标识) standard_full_name = current_abbr.replace("Daylight", "Standard") if "Daylight" in current_abbr else current_abbr # 提取短名称(如Eastern、Mountain) short_name = standard_full_name.split()[0] return { "短名称": short_name, "标准全称": standard_full_name, "当前缩写": current_abbr } # 输出结果 print(parse_timezone(tz_id1)) print(parse_timezone(tz_id2)) print(parse_timezone(tz_id3))
输出示例:
{'短名称': 'Eastern', '标准全称': 'Eastern Standard Time', '当前缩写': 'EDT'} {'短名称': 'Mountain', '标准全称': 'Mountain Standard Time', '当前缩写': 'MDT'} {'短名称': 'Pacific', '标准全称': 'Pacific Standard Time', '当前缩写': 'PDT'}
方法2:使用pytz库(兼容更早Python版本)
如果用的是Python3.9以下版本,或者需要更精准的时区名称控制,先安装pytz:
pip install pytz
再运行以下代码:
from timezonefinder import TimezoneFinder import pytz import datetime tf = TimezoneFinder() tz_id1 = tf.timezone_at(lat=40.4467, lng=-80.0158) tz_id2 = tf.timezone_at(lat=39.7439, lng=-105.02) tz_id3 = tf.timezone_at(lat=37.403, lng=-121.97) def parse_timezone(tz_id): if not tz_id: return None tz = pytz.timezone(tz_id) now = datetime.datetime.now(tz) # 获取当前时区缩写(自动适配夏令时) current_abbr = tz.tzname(now) # 直接获取标准时区全称 standard_full_name = tz._tzname[0] # 提取短名称 short_name = standard_full_name.split()[0] return { "短名称": short_name, "标准全称": standard_full_name, "当前缩写": current_abbr } print(parse_timezone(tz_id1)) print(parse_timezone(tz_id2)) print(parse_timezone(tz_id3))
说明
- 两种方法都无需手动维护大量时区映射,依赖成熟的时区库自动处理,适合大规模时区转换场景。
- 如果需要固定输出标准时区名称(不受夏令时影响),可以直接取
standard_full_name;如果要当前实际生效的时区缩写,取current_abbr即可。
内容的提问来源于stack exchange,提问作者Simon1
相关产品推荐
相关产品推荐

