Django DATETIME_FORMAT неверно (на один год) для определенных c дат - PullRequest
1 голос
/ 30 января 2020

Для клиента я храню журналы событий в базе данных postgres. Каждое событие имеет дату, которая хранится как метка времени с часовым поясом в postgres. Дата автоматически заполняется с использованием встроенного атрибута Djangos auto_now_add в определении модели.

В settings.py я установил следующее:

TIME_ZONE = 'UTC'
USE_TZ = True
DATETIME_FORMAT = 'd/m/o H:i:s'
DATE_FORMAT = 'd/m/o'
TIME_FORMAT = 'H:i:s'
SHORT_DATE_FORMAT = 'd/m/o'
SHORT_DATETIME_FORMAT = 'd/m/o H:i'

У меня большой опыт работы с этим механизмом, и до сих пор он никогда не вызывал проблем. Клиент на самом деле указал, что было несколько записей с датой, лежащей в будущем (невозможно для журнала событий).

После проверки внешнего интерфейса, а также администратора я могу убедиться, что появляются недопустимые даты, например (30/12/2020 и 31/12/2020) (все недопустимые даты находятся в этом диапазоне, другие даты до и после отображаются правильно). Когда я проверяю базу данных (Postgres), я могу убедиться, что сохраненные даты на самом деле оба в 2019 году и имеют следующие значения меток времени: 2019-12-30 10:23:07.451674+00 и 2019-12-31 08:12:26.635693+00.

Используемый шаблон во внешнем интерфейсе {{ log_item.date }} для отображения даты.

Что мне не хватает? Любые советы приветствуются.

1 Ответ

2 голосов
/ 30 января 2020

Используйте DATE_FORMAT = 'd/m/Y' вместо DATE_FORMAT = 'd/m/o'. Когда вы используете o форматирование для года, это обратная недельная нумерация. Так как 30 и 31 декабря была первая неделя 2020 года, это даст вам 2020 год.

...