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

pytz库智利时区转换异常:夏令时调整日期变更导致问题

解决pytz未适配智利夏令时调整的问题

针对智利因选举调整夏令时生效日期(从9月第一个周六改为第二个周六)而pytz未适配的情况,给你几个可行的解决办法:

  • 切换到zoneinfo(Python 3.9+ 推荐)
    Python 3.9及以上自带的zoneinfo模块使用系统或最新的tzdata时区数据库,通常会更快适配这类政策变更。如果你的环境满足版本要求,直接替换pytz的使用方式:

    from zoneinfo import ZoneInfo
    from datetime import datetime
    
    santiago_time = datetime(2024, 9, 8, 12, 0, tzinfo=ZoneInfo("America/Santiago"))
    utc_time = santiago_time.astimezone(ZoneInfo("UTC"))
    

    若系统tzdata版本较旧,可单独安装更新版的tzdata包:pip install --upgrade tzdata,zoneinfo会自动优先使用这个包的数据。

  • 手动更新pytz的时区数据
    pytz本身的时区数据如果是旧版本,你可以手动替换它的时区文件。找到pytz安装目录下的zoneinfo/America/Santiago文件,替换为从IANA时区数据库最新版本获取的对应文件。不过这种方式比较繁琐,且更新后可能受后续pytz升级覆盖。

  • 自定义tzinfo规则临时适配
    如果暂时无法切换模块或更新数据,可以自定义一个适配今年规则的Santiago时区类:

    from pytz import BaseTzInfo, utc
    from datetime import timedelta, datetime
    
    class CustomSantiagoTz(BaseTzInfo):
        def utcoffset(self, dt):
            # 2024年夏令时:9月第二个周六到4月第一个周日
            dst_start = datetime(2024, 9, 14, 0, 0)  # 第二个周六
            dst_end = datetime(2025, 4, 6, 0, 0)     # 次年4月第一个周日
            if dst_start <= dt.replace(tzinfo=None) < dst_end:
                return timedelta(hours=-3)  # 夏令时UTC-3
            else:
                return timedelta(hours=-4)  # 冬令时UTC-4
    
        def dst(self, dt):
            dst_start = datetime(2024, 9, 14, 0, 0)
            dst_end = datetime(2025, 4, 6, 0, 0)
            if dst_start <= dt.replace(tzinfo=None) < dst_end:
                return timedelta(hours=1)
            return timedelta(0)
    
        def tzname(self, dt):
            if self.dst(dt):
                return "CLST"
            return "CLT"
    
    # 使用示例
    santiago_tz = CustomSantiagoTz()
    local_time = datetime(2024, 9, 15, 10, 0, tzinfo=santiago_tz)
    utc_time = local_time.astimezone(utc)
    

    注意:这个自定义类只适配2024-2025年的规则,后续年份需要调整日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:11:16