为啥时间仍然显示 UTC 时区而不是 settings.TIME_ZONE?
Posted
技术标签:
【中文标题】为啥时间仍然显示 UTC 时区而不是 settings.TIME_ZONE?【英文标题】:Why does time still show with UTC time zone instead of settings.TIME_ZONE?为什么时间仍然显示 UTC 时区而不是 settings.TIME_ZONE? 【发布时间】:2019-03-05 12:07:26 【问题描述】:我有一个模型在模型的__str__()
方法中显示一个短字符串
def __str__(self):
return "Scheduled at %s" % (self.date_time.strftime("%B %d %Y %I:%M %p"))
#Output: <Task: Scheduled at September 30 2018 12:30 AM>
# it should have been: <Task: Scheduled at September 29 2018 08:30 PM>
当我转到 Django 管理员 时,我在标题中看到 Task: Scheduled at September 30 2018 12:30 AM 并在输入中填充了正确的TIME_ZONE
:20:30:00
settings.py
TIME_ZONE = 'Etc/GMT+4'
USE_I18N = False
USE_L10N = False
USE_TZ = True
他一直以 UTC 时区显示时间,但我在设置中设置了 TIME_ZONE='Etc/GMT+4
。
我希望将时间数据以 UTC 格式保存在数据库中,并以 TIME_ZONE 显示,在我的情况下为 Etc/GTM+4
【问题讨论】:
【参考方案1】:Django 在displaying values with templates 时转换日期时间。如果您想在任意代码块中进行转换,请使用 localtime()
助手:
from django.utils.timezone import localtime
def __str__(self):
return "Scheduled at %s" % localtime(self.date_time).strftime("%B %d %Y %I:%M %p")
【讨论】:
谢谢!我也设置了TIME_ZONE,是多余的吗?django.utils.timezone.localtime(date_time, pytz.timezone(settings.TIME_ZONE))
这是多余的。文档说默认值是当前时区,如果您还没有激活另一个时区,则与TIME_ZONE
相同。以上是关于为啥时间仍然显示 UTC 时区而不是 settings.TIME_ZONE?的主要内容,如果未能解决你的问题,请参考以下文章
巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量
如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?
将 UTC 日期和时间转换为 UNIX 时间会给出错误的(时区不同)值。为啥?