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

Django3.2配置Asia/Tehran时区报ValueError错误如何解决?

Django设置Asia/Tehran时区报错排查方案

核心原因说明

报错信息显示程序实际加载的时区值为全大写的ASIA/TEHRAN,和你在settings.py中填写的Asia/Tehran格式不一致,说明运行时读取到的时区值被其他逻辑覆盖,可按照以下步骤排查解决:

  • 第一步:排查是否有其他配置覆盖了TIME_ZONE
    优先检查项目是否存在local_settings.py、.env环境变量、部署配置(如uWSGI/Gunicorn的环境变量配置)中定义了大写的TZ或者TIME_ZONE值,Django会优先读取系统环境变量中的TZ值作为时区配置。你可以在项目根目录添加临时测试代码验证实际加载的时区值:
    from django.conf import settings
    print(settings.TIME_ZONE)
    
  • 第二步:检查系统时区数据包完整性
    Ubuntu 20的部分精简安装镜像可能缺失完整的时区数据,执行以下命令重新安装tzdata数据包:
    sudo apt update && sudo apt install --reinstall tzdata
    
    安装完成后执行命令验证系统是否支持Asia/Tehran时区:
    timedatectl list-timezones | grep -i tehran
    
    正常输出会包含Asia/Tehran条目。
  • 第三步:验证Django依赖的时区库状态
    你使用的Django 3.2原生支持Asia/Tehran时区,可通过以下代码验证依赖的pytz库是否包含该时区:
    import pytz
    print('Asia/Tehran' in pytz.all_timezones)
    
    若返回False,直接升级pytz包即可:
    pip install --upgrade pytz
    
  • 第四步:排查自定义代码的异常修改
    检查项目中是否存在自定义脚本、中间件等逻辑对TIME_ZONE值做了全大写转换,导致传入Django的配置变成了不被识别的ASIA/TEHRAN。

临时规避方案

如果排查后仍找不到配置覆盖的逻辑,可以在settings.py的TIME_ZONE配置行下方手动强制覆盖环境变量,规避其他位置的配置污染:

TIME_ZONE = 'Asia/Tehran'
import os
os.environ['TZ'] = TIME_ZONE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:03