You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python时区转国家标识(国旗/名称/代码):求高效优化方案

时区转国旗/国家信息的优化方案

问题描述

  • 需求:将任意时区(如Europe/Istanbul、Europe/Berlin)转换为「国旗/国家名称/国家代码」格式的结果(如🇹🇷Turkey/TR、🇩🇪Germany/DE)
  • 现有问题:当前代码仅60%可用,运行速度慢,处理Europe/London等部分时区时返回NONE
  • 现有代码:
import pycountry
import geopy
from geopy.geocoders import Nominatim

#Example:
timezone='Europe/London'

try:
    city=str(timezone).split('/')[1].replace('/','')
except:pass

def vpzip(city):
    coun=""
    code=""
    flag=""
    country=""
    try:
        geolocator=Nominatim(user_agent="location-finder",timeout=3)
        location=geolocator.geocode(city, language='en')
        countrys=str(location).split(',')[-1].replace(' ','')
        countr=pycountry.countries.get(name=countrys)
        code=countr.alpha_2
        flag=countr.flag
        coun=countr.name
        country=str(flag)+'/'+str(coun)+'/'+str(code)
    except:
        country='NONE'
    return country

print(vpzip(city))

核心优化思路

  • 移除外部地理API依赖:原代码依赖Nominatim网络请求,速度慢且易出错,改用本地时区-国家映射数据
  • 修复时区解析逻辑:直接从时区对象提取国家代码,无需拆分城市名,避免同名城市的歧义
  • 利用官方维护的映射数据:pytz库内置时区与ISO国家代码的对应关系,结合pycountry快速获取国旗和名称

完整实现代码

import pycountry
import pytz

def timezone_to_country_info(timezone_str):
    try:
        # 获取目标时区对象
        tz = pytz.timezone(timezone_str)
        # 从时区对象直接提取ISO 3166-1 alpha2国家代码
        country_code = tz.country_code
        
        # 处理无默认国家代码的特殊时区
        if not country_code:
            special_cases = {
                'Europe/London': 'GB',
                'Europe/Vatican': 'VA',
                'Europe/San_Marino': 'SM',
                'Africa/Reunion': 'FR'
                # 可根据需求补充更多特殊映射
            }
            country_code = special_cases.get(timezone_str)
            if not country_code:
                return 'NONE'
        
        # 通过国家代码获取完整国家信息
        country = pycountry.countries.get(alpha_2=country_code)
        if not country:
            return 'NONE'
        
        # 拼接成指定格式
        return f"{country.flag}{country.name}/{country.alpha_2}"
    except pytz.UnknownTimeZoneError:
        return 'NONE'
    except Exception:
        return 'NONE'

# 测试示例
print(timezone_to_country_info('Europe/Istanbul'))  # 🇹🇷Turkey/TR
print(timezone_to_country_info('Europe/Berlin'))   # 🇩🇪Germany/DE
print(timezone_to_country_info('Europe/London'))   # 🇬🇧United Kingdom/GB
print(timezone_to_country_info('America/New_York'))# 🇺🇸United States/US

优化效果说明

  1. 速度大幅提升:全程本地数据运算,无网络请求延迟
  2. 准确性提高:基于pytz官方映射,避免地理编码的歧义问题,解决Europe/London这类时区的返回错误
  3. 鲁棒性增强:明确处理未知时区、无国家代码的场景,补充特殊时区映射表,减少NONE返回情况
  4. 代码简洁易维护:移除冗余逻辑,错误处理更清晰

内容的提问来源于stack exchange,提问作者Troy9090

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:05:53