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

如何用Python获取本地时区的缩写名称(如CET、EST)

获取本地时区缩写(基于GPS/IP自动定位)

实现步骤

要自动获取时区缩写,需分两步:先获取设备经纬度位置,再根据经纬度匹配时区并提取缩写。

依赖安装

先安装所需Python库:

pip install geopy pytz timezonefinder
# 若使用GPS硬件定位,额外安装:pip install gps

代码实现

1. 获取位置经纬度

提供两种定位方式,优先用GPS硬件获取精确位置,失败则切换到IP定位:

from geopy.geocoders import Nominatim
import gps

def get_location_by_ip():
    # 通过IP获取近似位置
    geolocator = Nominatim(user_agent="local_timezone_app")
    location = geolocator.geocode("me")
    if location:
        return (location.latitude, location.longitude)
    raise Exception("无法通过IP获取位置")

def get_location_by_gps():
    # 通过GPS硬件获取精确位置(需设备支持+gpsd服务运行)
    session = gps.gps("localhost", "2947")
    session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
    
    for report in session:
        if report['class'] == 'TPV':
            if hasattr(report, 'lat') and hasattr(report, 'lon'):
                return (report.lat, report.lon)
    raise Exception("无法获取GPS信号")

2. 根据经纬度提取时区缩写

import pytz
from datetime import datetime
from timezonefinder import TimezoneFinder

def get_timezone_abbrev(lat, lon):
    tf = TimezoneFinder()
    timezone_str = tf.timezone_at(lng=lon, lat=lat)
    if not timezone_str:
        raise Exception("无法匹配时区")
    
    tz = pytz.timezone(timezone_str)
    # 基于当前时间获取时区缩写,自动适配夏令时切换
    return datetime.now(tz).strftime('%Z')

# 主执行逻辑
if __name__ == "__main__":
    try:
        # 优先尝试GPS定位
        lat, lon = get_location_by_gps()
    except Exception:
        # 失败则用IP定位
        lat, lon = get_location_by_ip()
    
    try:
        abbrev = get_timezone_abbrev(lat, lon)
        print(f"当前时区缩写: {abbrev}")
    except Exception as e:
        print(f"错误: {str(e)}")

注意事项

  • GPS定位要求设备带有GPS模块,Linux系统需提前启动gpsd服务,Windows/macOS需确保硬件驱动正常
  • IP定位为近似结果,时区边界地区可能存在偏差
  • %Z返回的缩写会随夏令时自动切换(如CET/CEST、EST/EDT)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:50:35