У нас есть конкурс моделей Django:
class Contest(models.Model):
...
time_start = models.DateTimeField()
Django settings.py
имеет следующие настройки TZ:
LANGUAGE_CODE = 'ru-ru'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Время сервера установлено на MSK + часовой пояс 03:
$ date
Wed May 29 12:41:14 MSK 2019
Что ожидается
- Django сохраняет UTC-datetime в базе данных.
- Когда я открываю объект для редактирования, django-admin преобразует UTC-datetime из базы данных в базу данныхчасовой пояс моего локального компьютера, который уже хранится в моем сеансе django.
- И наоборот, когда я сохраняю объект с датой, он преобразуется из моего локального компьютера TZ, вводится в администраторе django, в UTC и сохраняется в базе данных..
Что я получил
- Вместо преобразования полученного времени и даты в UTC, Django просто исправляет его со смещением
TIME_ZONE
и сохраняет в БД.Неважно, какой TZ используется на моем локальном компьютере - US / RU / и т. Д.Он всегда вычитает -03 часа, так как смещение «Европа / Москва» равно +03, и сохраняет результат в БД. - Когда я изменяю TZ на своем локальном компьютере и повторно захожу на django-admin, объект datetime имеет значениене исправлено, чтобы уважать мой текущий клиент TZ, но всегда остается неизменным, несмотря на то, что я использую разные часовые пояса.
Итак, как это должно работать?
DB
MariaDB> describe contest;
+------------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+----------------+
| time_start | datetime | YES | | NULL | |
Django версия:
>>> django.__version__
'2.2.1'
Спасибо.