我将python(flask
)应用程序与docker打包在一起。在我的应用中,我正在使用datetime
和datetime.utcnow()
库生成UTC日期。
不幸的是,当我使用MongoDB Compass
检查保存的数据时,UTC日期偏移了两个小时(到我的本地时区)。我所有的Docker容器的时区均设置为Etc/UTC
。 Morover,mongoengine
与MongoDB的连接使用了tz_aware=False
和tzinfo=None
,这阻止了即时日期转换。
偏移量来自哪里以及如何解决?
答案 0 :(得分:11)
最后,在尝试证明自己做错了事和无头的头脑之后,我找到了造成问题的原因和解决方案。
我们生活在幻想的世界中,并且所见即所得!! 。我决定通过mongo shell
客户检查我的数据
而不是MongoDB Compass GUI
。我发现到达数据库的数据包含正确的UTC日期。这缩小了我之前所有的范围
假设我的python应用程序和应用程序所处的环境必须有问题。剩下的是MongoDB Compass
本身。
将计算机上的时区更改为随机时区并刷新MongoDB Compass
中的集合后,显示的UTC日期更改为适合随机时区的日期。
请注意,MongoDB Copass
会显示数据库Date
字段中保存的内容,并会放大显示您机器的时区。例如,如果您保存的UTC时间等于8:00 am
,
并且您机器的时区是欧洲/华沙,那么MongoDB Compass
将显示10:00am
。