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

Django应用部署时日期字段无法获取本地时间的问题求助

解决Django中非时区日期字段问题

看起来你是遇到了时区配置导致的日期不一致问题,我来帮你一步步搞定:

1. 先修复Django的时区核心配置

问题本质是服务器默认大概率用的UTC时区,而你需要让Django适配中非地区的本地时区。打开项目的settings.py,修改这两个关键配置:

# 根据你所在的具体中非国家选择对应时区,举几个常用的:
# 喀麦隆、尼日利亚、乍得 → 'Africa/Douala'(UTC+1)
# 刚果(金)、坦桑尼亚、赞比亚 → 'Africa/Kinshasa'(UTC+2)
TIME_ZONE = 'Africa/Douala'

# 确保这个值为True,Django会自动处理时区转换逻辑
USE_TZ = True

Django支持的完整时区列表可以通过pytz.all_timezones查看,选你所在地区对应的即可。

2. 纠正日期字段的默认值写法

你之前用default=datetime.now()是典型误区——这个函数只会在模型类第一次加载时执行一次,之后所有新创建的对象都会复用这个固定时间,根本不是实时的当前时间。

如果你想继续用auto_now_add的自动赋值逻辑,只要上面的时区配置正确,原字段定义date_creation = models.DateField(auto_now_add=True)就会自动使用你设置的中非时区的当前日期,完全不需要修改字段。

如果要手动指定默认值(比如不需要auto_now_add的强制自动行为),一定要用Django提供的时区工具:

from django.utils.timezone import now

date_creation = models.DateField(default=now)  # 重点:不要加括号!

这样每次创建对象时,都会实时调用now()获取当前时区的时间。

3. 验证配置效果

修改完成后重启服务器,创建几个新对象,检查date_creation字段的值是否和你所在地区的本地日期一致。

简单说下原理:当USE_TZ=True时,Django会把时间以UTC格式存在数据库,但读取和展示时会自动转换成TIME_ZONE设置的时区时间,auto_now_add和now()都会严格遵循这个配置逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:54:04