在Django中检索时区感知的DateTimeField

在Django中检索时区感知的DateTimeField,django,pytz,Django,Pytz,在我的模型中,我有一个DateTimeFieldsay class ReturnEvent(models.Model): book_title = models.CharField() return_time = models.DateTimeField() 检索要打印的返回时间时,例如: return_event = ReturnEvent.objects.get(id=1) print(return_event.return_time.strftime("%H:%M")) 我看到

在我的模型中,我有一个
DateTimeField
say

class ReturnEvent(models.Model):
  book_title = models.CharField()
  return_time = models.DateTimeField()
检索要打印的
返回时间时,例如:

return_event = ReturnEvent.objects.get(id=1)
print(return_event.return_time.strftime("%H:%M"))
我看到datetime不知道时间像:

2016-06-18 08:18:00+00:00

但是,我喜欢看到本地时间使用strftime

2016-06-1810:18:00+02:00


有没有快速的解决方案?

如果您的设置中有
USE_TZ=True
,Django会将数据库中的所有datetime对象存储为
UTC
,并在模板中渲染时将其从
settings.py
动态转换为您的
时区=XYZ

这就是为什么从数据库中检索时,
datetime
对象可以识别时区,但它的时区是
UTC
(因此
2016-06-18 08:18:00+00:00
中的
+00:00
)。由于您正在将时间转换为自己的
str
(而不是在模板中渲染),因此Django不会将其转换为您的
时区设置。你需要自己把它转换成你想要的时区

如果要将其从
时区设置转换为时区,可以执行以下操作

from django.utils import timezone
to_tz = timezone.get_default_timezone()
print return_event.return_time.astimezone(to_tz).strftime("%H:%M")

您是否在
settings.py
中设置了
USE_TZ=True