Почему Django преобразовывает осведомленную временную метку, полученную из запроса API - PullRequest
0 голосов
/ 20 октября 2019

Мое приложение Django получает POST запрос API с одним из полей в теле, содержащим метку времени. Если я регистрирую его значение сразу после десериализации, я вижу ту же метку времени, но в другом часовом поясе.

Вот пример тела отправленного запроса:

{
    "event_timestamp": "2019-11-08T15:00:00+02:00",
    ...
}

Еще, если я попытаюсь войти в системуЗначение этого поля сразу после того, как оно проходит десериализацию, я вижу:

> print(validated_data['event_timestamp'])

2019-11-08 14:00:00+01:00

TZ включено и настроено на часовой пояс CEST:

USE_TZ = True
TIME_ZONE = 'Europe/Vienna'

Я мог бы сделатьпредположение, что Django автоматически конвертирует полученную временную метку в определенный часовой пояс для всего проекта, но результат такого преобразования дал бы мне тот же результат:

2019-11-08T15:00:00+02:00 represented as CEST timezone is 2019-11-08T15:00:00+02:00

Но вместо этого я вижу преобразование в 2019-11-08 14:00:00+01:00 который является часовым поясом для Лондона.

Я понимаю, что такие преобразования являются нормальным процессом обработки Django осведомленных объектов даты и времени, но почему он преобразует полученное значение в часовой пояс, который не установлен по умолчанию для самого проекта и не имееткакое-либо отношение к полученной метке времени?

Есть ли способ управления по умолчанию для таких преобразований в тimezone я вручную определяю в settings.py или отключаю их все вместе?

1 Ответ

1 голос
/ 20 октября 2019

Ваш часовой пояс не CEST, это Europe/Vienna. Переход на летнее время заканчивается 27 октября 2019 года, поэтому 8 ноября смещение часового пояса составит +01:00. Таким образом, Django правильно конвертирует часовой пояс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...