在 Django 中检索时区感知 DateTimeField
Posted
技术标签:
【中文标题】在 Django 中检索时区感知 DateTimeField【英文标题】:Retrieve timezone aware DateTimeField in Django 【发布时间】:2016-09-28 08:57:36 【问题描述】:在我的模型中,我有一个DateTimeField
说
class ReturnEvent(models.Model):
book_title = models.CharField()
return_time = models.DateTimeField()
当我检索到要打印的return_time
时,例如:
return_event = ReturnEvent.objects.get(id=1)
print(return_event.return_time.strftime("%H:%M"))
我看到日期时间不知道时间像:
2016-06-18 08:18:00+00:00
不过,我喜欢使用 strftime 查看本地时间。
2016-06-18 10:18:00+02:00
有没有快速的解决方案?
【问题讨论】:
您在settings.py
中设置了USE_TZ = True
吗?
【参考方案1】:
如果您的设置中有USE_TZ = True
,Django 将数据库中的所有日期时间对象存储为UTC
,并在模板中渲染时将它们从settings.py
即时转换为您的TIME_ZONE=XYZ
。
这就是为什么当从数据库中检索时,datetime
对象可以识别时区,但它的时区为 UTC
(因此 2016-06-18 08:18:00+00:00
中的 +00:00
)。因为,您自己将时间转换为str
(而不是在模板中呈现),因此Django 不会将其转换为您的TIME_ZONE
设置。您需要自己将其转换为所需的时区。
如果您想将其从 TIME_ZONE
设置转换为时区,您可以这样做
from django.utils import timezone
to_tz = timezone.get_default_timezone()
print return_event.return_time.astimezone(to_tz).strftime("%H:%M")
【讨论】:
以上是关于在 Django 中检索时区感知 DateTimeField的主要内容,如果未能解决你的问题,请参考以下文章
Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?