配置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
相关产品推荐
相关产品推荐

