在Django中检索时区感知的DateTimeField

时间:2016-05-30 13:40:59

标签: django pytz

在我的模特中,我有一个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

对此有快速解决方案吗?

1 个答案:

答案 0 :(得分:6)

如果您的设置中有USE_TZ = True,Django会将所有日期时间对象作为UTC存储在数据库中,并在运行时将其从TIME_ZONE=XYZ转换为settings.py在模板中渲染。

这就是为什么,从数据库中检索时,datetime对象可识别时区,但它的时区为UTC(因此+00:00中为2016-06-18 08:18:00+00:00。因为,您将时间转换为str自己(并且不在模板中呈现),因此Django不会将其转换为您的TIME_ZONE设置。您需要将其自己转换为所需的TimeZone。

如果您想从TIME_ZONE设置将其转换为TimeZone,则可以

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