MongoDB Compass 中的 UTC 日期不正确

Incorrect UTC date in MongoDB Compass

我用 docker 打包了我的 python (flask) 应用程序。在我的应用程序中,我使用 datetime.utcnow().

使用 datetime 库生成 UTC 日期

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

偏移量从何而来,如何解决?

最后,在试图证明自己是错误的,并且没有毛发的情况下,我找到了问题的原因和解决方案。

我们生活在幻想的世界里所见即所得!!!。我决定通过 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.