Я упаковываю свое приложение на python (flask
) с помощью docker. В моем приложении я генерируя дату UTC с datetime
и datetime.utcnow()
datetime
библиотеки с использованием datetime.utcnow()
.
К сожалению, когда я проверяю сохраненные данные с помощью MongoDB Compass
дата в формате UTC смещается на два часа (на мой локальный часовой пояс). Все мои док-контейнеры имеют часовой пояс Etc/UTC
. Более того, соединение mongoengine
с MongoDB использует tz_aware=False
и tzinfo=None
, что предотвращает преобразование дат на лету.
Откуда берется смещение и как его исправить?
Наконец, пытаясь доказать свою неправоту и голова, я нашел причину и решение проблемы.
Мы живем в мире иллюзий, и то, что вы видите, не то, что вы получаете! , Я решил проверить мои данные поверх mongo shell
а не MongoDB Compass GUI
. Я выясню, что данные, поступившие в базу данных, содержат правильную дату UTC. Это сузило все мое предыдущее предположение о том, что в моем приложении python должно быть что-то неправильное, а также среда, в которой работает приложение. Что осталось от MongoDB Compass
. После изменения часового пояса на моей машине в случайном часовом поясе и обновления коллекции в MongoDB Compass
отображаемая дата UTC изменилась на дату, которая соответствует случайному часовому поясу.
Имейте в MongoDB Copass
что MongoDB Copass
отображает все, что сохраняется в поле " Date
базы данных", увеличенное вокруг вашего часового пояса. Например, если вы сохранили время UTC, эквивалентное 8:00 am
, а ваш часовой пояс вашего компьютера - Европа/Варшава, тогда MongoDB Compass
отобразит 10:00am
.