Как я могу получить информацию о часовом поясе в Django?

Я использую Delorean для расчета даты и времени в Python Django.

http://delorean.readthedocs.org/en/latest/quickstart.html

Это то, что я использую:

now = Delorean(timezone=settings.TIME_ZONE).datetime
todayDate = now.date()

Но я получаю это предупреждение:

RuntimeWarning: DateTimeField start_time received a naive datetime (2014-12-09 00:00:00) while time zone support is active.

Я хочу знать, как это сделать.

Я попробовал это также:

todayDate = timezone.make_aware(now.date(), timezone=settings.TIME_ZONE)

тогда я получаю это:

AttributeError: 'datetime.date' object has no attribute 'tzinfo'

Ответ 1

Непонятно, пытаетесь ли вы в конечном итоге получить объект date или объект datetime, поскольку в Python нет понятия "дата с учетом часового пояса".

Чтобы получить объект date соответствующий текущему времени в текущем часовом поясе, вы должны использовать:

# All versions of Django
from django.utils.timezone import localtime, now
localtime(now()).date()

# Django 1.11 and higher
from django.utils.timezone import localdate
localdate()

То есть: вы получаете текущую datetime в UTC; вы конвертируете его в локальный часовой пояс (т.е. TIME_ZONE); а затем взять дату от этого.

Если вы хотите получить объект datetime соответствующий 00:00:00 текущей даты в текущем часовом поясе, вы должны использовать:

# All versions of Django
localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0)

# Django 1.11 and higher
localtime().replace(hour=0, minute=0, second=0, microsecond=0)

Исходя из этого и вашего другого вопроса, я думаю, что вы запутались в пакете Delorean. Я предлагаю придерживаться функциональности Django и Python datetime.

Ответ 2

Чтобы завершить ответ Кевина Кристофера Генри, начиная с Django 1.11, значение по умолчанию для localtime() теперь(), поэтому вам не нужно его указывать.

# All versions of Django
localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0)

# Django 1.11 and higher
localtime().replace(hour=0, minute=0, second=0, microsecond=0)