Django配置时区后DateTimeField仍显示UTC格式的问题求助
解决Django DateTimeField显示UTC时间的问题
问题原因
当USE_TZ = True时,Django会将DateTimeField的值以UTC时区存储在数据库中,直接访问该字段得到的是UTC时间的时区感知对象,不会自动转换为你设置的Asia/Ho_Chi_Minh时区。
解决方案
修改你的getDateOrder方法,使用Django提供的时区工具将UTC时间转换为本地时区:
- 首先导入Django的时区模块:
from django.utils import timezone
- 修正并更新模型中的方法:
def getDateOrder(self): weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] # 将UTC时间转换为本地时区 local_datetime = timezone.localtime(self.dateOrder) return weekdays[local_datetime.weekday()] + ', ' + local_datetime.strftime("%d/%m/%Y, %H:%M")
额外说明
timezone.localtime()会自动根据settings.py中TIME_ZONE的配置完成时区转换。- 当
USE_TZ=True时,auto_now_add=True生成的是带时区信息的datetime对象,确保了转换的有效性;如果是无时区信息的datetime对象,需要先通过timezone.make_aware()转为带时区的对象再进行转换。
内容的提问来源于stack exchange,提问作者user21960224
相关产品推荐
相关产品推荐

