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

Django项目适配America/Mexico_City取消夏令时的时区问题

解决Django中America/Mexico_City时区夏令时规则更新问题

你的问题根源是Django依赖的时区数据库(tzdata)未包含墨西哥城2023年取消夏令时的最新规则,导致localtime()仍沿用旧的DST逻辑。以下是无需大规模修改代码的解决方案:

1. 更新时区数据库

Django的时区规则依赖于第三方库或系统的tz数据库,需根据你的环境升级对应组件:

  • 使用pytz库(Django 3.x及以前常用):
    执行命令升级到最新版本,新版本会包含IANA时区数据库的最新规则:
    pip install --upgrade pytz
    
  • 使用zoneinfo(Python 3.9+、Django 4.0+默认):
    升级tzdata包以获取最新时区数据:
    pip install --upgrade tzdata
    
  • 系统级时区数据库(Linux服务器):
    若你的系统直接使用系统时区文件,需更新系统的tzdata包:
    • Ubuntu/Debian:
      sudo apt update && sudo apt install --only-upgrade tzdata
      
    • CentOS/RHEL:
      sudo yum update tzdata
      

2. 验证更新效果

在Django shell中执行以下代码,确认localtime()返回的时区信息为**CST(标准时间)**而非CDT(夏令时):

from django.utils.timezone import localtime, now
current_utc = now()
local_time = localtime(current_utc)
print(local_time.tzinfo)
# 预期输出:<DstTzInfo 'America/Mexico_City' CST-1 day, 20:00:00 STD>

3. 关键注意事项

  • 保持USE_TZ = True的设置,这是Django多时区功能的核心,避免依赖服务器本地时区的datetime.now()(该方法不可靠,尤其是跨服务器部署场景)。
  • 若更新后仍存在问题,可尝试清除Django缓存,避免旧时区数据被缓存复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:00:10