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

配置Django时区为Africa/Lagos后仍返回UTC时间的问题求助

Django中timezone.now()返回UTC而非拉各斯时间的解决办法

你的配置里USE_TZ = True,这意味着Django会以UTC时间存储所有日期时间数据,timezone.now()返回的正是这个UTC时间对象(带<UTC>时区信息),这是正常的设计行为——拉各斯时间(WAT,UTC+1)只是你配置的显示时区,而非内部存储时区。

要获取配置的Africa/Lagos时区的当前时间,你可以做以下操作:

方法1:转换当前UTC时间为本地时区

使用timezone.localtime()将UTC时间转换为你设置的本地时区:

from django.utils import timezone
# 转换timezone.now()返回的UTC时间为本地时区
local_time = timezone.localtime(timezone.now())
# 或者直接调用localtime(),默认使用当前UTC时间转换
local_time = timezone.localtime()

执行后返回的datetime对象会带有<Africa/Lagos>时区信息,时间也会是拉各斯当地时间。

方法2:模板中自动转换

如果是在Django模板中展示时间,只要你保持USE_TZ = True和TIME_ZONE = "Africa/Lagos"的配置,模板会自动将UTC时间转换为拉各斯时间显示,无需手动处理。比如:

{{ some_datetime_field }}

会直接输出拉各斯当地时间。

补充说明

  • USE_TZ = True是Django处理多时区场景的最佳实践,确保数据存储的一致性,避免时区混乱。
  • 拉各斯时间与UTC的时差是固定+1小时,所以转换后的时间会比你当前得到的UTC时间早1小时,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:39:49