在 Django 中检索时区感知 DateTimeField
Retrieve timezone aware DateTimeField in Django
在我的模型中,我有一个 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
有快速解决方法吗?
如果您的设置中有 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")
在我的模型中,我有一个 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
有快速解决方法吗?
如果您的设置中有 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")