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
- Ubuntu/Debian:
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
相关产品推荐
相关产品推荐

