Преобразование временной метки в правильное время в местном часовом поясе - Django
Я получаю метку времени из API. Когда я преобразовываю ее с помощью:
timestamp = datetime.fromtimestamp(json.loads(m)["_timestamp"], tz=pytz.timezone('Europe/Berlin'))
Я получаю правильное время в консоли, когда я печатаю его:
2021-11-10 15:22:26+01:00
Но когда я сохраняю его в базе данных с:
BedTemperatureHistory.objects.create(TimeStamp=timestamp)
Временная метка в базе данных выглядит примерно так (на один час меньше):
2021-11-10 14:22:26.000000 +00:00
Мои настройки часового пояса выглядят следующим образом:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Europe/Berlin'
USE_I18N = True
USE_L10N = True
USE_TZ = False
Кто-нибудь знает, что мне нужно сделать, чтобы сохранить правильную временную метку в моей базе данных?
Вам необходимо включить поддержку часовых поясов в настройках.
USE_TZ = True
EDIT: В вашем вопросе временная метка действительно сохранена правильно. Вы заметите, что два времени фактически одинаковы, 15:22+01:00 - это то же самое, что 14:22+00:00. Django хранит время даты в UTC, чтобы избежать проблем с переходом на летнее время:
Django хранит информацию о времени в UTC в базе данных, использует объекты времени с учетом временной зоны внутри, и переводит их в часовой пояс конечного пользователя в шаблонах и формах.
.