Использование strftime в Django datetime создает время UTC в строке
У меня есть следующий код в одной из моих моделей:
def shortDescription(self):
return self.name + ' ' + self.class_date.strftime("%I:%M")
self.class_date-это часовой пояс, знающий DateTimeField, self.class_date.is_aware () истинно, USE_TZ истинно.
shortDescription возвращает строку, которая дает время в UTC, а не часовой пояс по умолчанию, помещая {{ aclass.class_date }} в шаблоне отображается время в правильной зоне.
strftime всегда работает на базе, наивное время? Или что еще происходит здесь?
1 ответов
когда вы напрямую ссылаетесь на части datetime, такие как %I
или %M
, он использует его прямо, как это без преобразования локали. Если вы включили %Z
вы увидите, что время в UTC
. Если вам нужны результаты с учетом локали, вам нужно использовать более ограниченный %X
, который просто выплюнет полное время, преобразованное для локали.
Если вам нужно больше, вам придется преобразовать его:
from django.utils import timezone
def shortDescription(self):
class_date = timezone.localtime(self.class_date)
return self.name + ' ' + class_date.strftime("%I:%M")
или, вы можете положиться на date
фильтр, который автоматически делает это для вас:
from django.template import defaultfilters
def shortDescription(self):
return self.name + ' ' + defaultfilters.date(self.class_date, 'g:i')