Предположим,
Я использую Django 2.x и использую настройки по умолчанию.то есть TIME_ZONE = 'UTC'
и USE_TZ = True
Я записываю данные в Гонолулу, Гавайи, что означает 2019-4-9 9 вечера (пользовательское время) в Гонолулу 2019-4-10в UTC (серверное время)
Теперь я хочу отфильтровать по 2019-4-9 гг. время Гонолулу (пользовательское время)
Вот какой демонстрационный код
class TimelineTable(models.Model):
accessed = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.accessed}'
Вот данные в TimelineTable (записанные в 2019-4-9 по Гонолулу )
ID accessed
1 2019-04-10 07:19:30.319881
2 2019-04-10 07:19:35.004506
3 2019-04-10 07:19:37.612088
Без учета часового пояса, выборка данных работает нормально
>>> TimelineTable.objects.filter(accessed__date=datetime.date(2019, 4, 9))
<QuerySet []>
>>> TimelineTable.objects.filter(accessed__date=datetime.date(2019, 4, 10))
<QuerySet [<TimelineTable: 2019-04-10 07:19:30.319881+00:00>, <TimelineTable: 2019-04-10 07:19:35.004506+00:00>, <TimelineTable: 2019-04-10 07:19:37.612088+00:00>]>
Теперь проблема в часовом поясе.
Я говорю с сервером: Эй, дайте мне записи, которые я записал в Гонолулу в 2019-4-9 годах.
>>> Honolulu = pytz.timezone("Pacific/Honolulu")
>>> t = datetime.datetime(2019, 4, 9, tzinfo=Honolulu)
>>> TimelineTable.objects.filter(accessed__date=t)
<QuerySet []>
Я ожидал 3 записи, но ничего не происходит.
Как получить эти записи, без каких-либо ошибок?