5

我用 docker 打包我的 python ( flask) 应用程序。在我的应用程序中,我使用datetime库生成 UTC 日期datetime.utcnow()

不幸的是,当我检查保存的数据时MongoDB Compass,UTC 日期偏移了两个小时(到我的本地时区)。我所有的 docker 容器都将时区设置为Etc/UTC. Morover,mongoengine与 MongoDB 的连接使用tz_aware=Falseand tzinfo=None,是什么阻止了实时日期转换。

偏移量来自哪里以及如何解决?

4

1 回答 1

15

最后,在试图证明自己错了,无毛头后,我找到了问题的原因和解决方案。

我们生活在虚幻的世界里,所见即所得!!!. 我决定通过mongo shell客户端而不是MongoDB Compass GUI. 我发现到达数据库的数据包含正确的 UTC 日期。这缩小了我之前的所有假设,即我的 python 应用程序和应用程序所在的环境一定有问题。剩下的就是MongoDB Compass它自己。将我机器上的时区更改为随机时区并在 内刷新集合后MongoDB Compass,显示的 UTC 日期更改为适合随机时区的日期。

请注意,它MongoDB Copass会显示保存在数据库Date字段中的任何内容,并放大您机器的时区。例如,如果您保存的 UTC 时间等于8:00 am,并且您的机器的时区是 Europe/Warsaw,那么MongoDB Compass将显示10:00am

于 2018-06-29T09:58:11.397 回答