2016-05-30 3 views
1

В моей модели, у меня есть DateTimeField сказатьRetrive часовой пояс известно DateTimeField в Django

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")) 

Я вижу в DateTime не известно время как:

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

Однако мне нравится видеть местное время, используя strftime.

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

Есть быстрое решение для этого?

+0

У вас есть 'USE_TZ = true' установлен в' settings.py'? – C14L

ответ

2

Если у вас есть USE_TZ = True в настройках, Django хранит все объекты DateTime в базе данных как UTC и преобразующие их в свой TIME_ZONE=XYZ из settings.py на лету при визуализации в шаблонах.

Вот почему, когда извлекается из базы данных, datetime объекта часового пояса известен, но он имеет UTC как его часовой пояс (отсюда +00:00 в 2016-06-18 08:18:00+00:00). Поскольку, вы конвертируете время в str самостоятельно (а не рендеринг в шаблоне), поэтому Django не конвертирует его в настройку TIME_ZONE. Вам необходимо преобразовать его в желаемый TimeZone.

Если вы хотите, чтобы преобразовать его в TimeZone от вашей настройки TIME_ZONE, вы можете сделать

from django.utils import timezone 
to_tz = timezone.get_default_timezone() 
print return_event.return_time.astimezone(to_tz).strftime("%H:%M") 
Смежные вопросы