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数据包:
安装完成后执行命令验证系统是否支持Asia/Tehran时区:sudo apt update && sudo apt install --reinstall tzdata
正常输出会包含timedatectl list-timezones | grep -i tehranAsia/Tehran条目。 - 第三步:验证Django依赖的时区库状态
你使用的Django 3.2原生支持Asia/Tehran时区,可通过以下代码验证依赖的pytz库是否包含该时区:
若返回False,直接升级pytz包即可:import pytz print('Asia/Tehran' in pytz.all_timezones)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
相关产品推荐
相关产品推荐

