【问题标题】:MongoDB Pymongo Ubuntu - time issuesMongoDB Pymongo Ubuntu - 时间问题
【发布时间】:2013-12-31 17:28:01
【问题描述】:

我有一个应用程序通过 REST API 运行烧瓶与 MongoDB 数据库通信。我看到应用程序中的时间读数要关闭 5 小时 - 这让我认为这是一个时区问题。

Ubuntu 正在向我显示正确的时间 - 它的格式符合 EST。不过,我认为对时区一无所知的 MongoDB 显示不正确的本地时间(即使在 UTC 中)。运行 db.serverStatus() 时,我收到回复说:

"localTime" : ISODate("2013-12-13T21:15:16.663+19:00"),

大约是 12 月 12 日晚上 9:15。所以UTC应该是凌晨2点15分左右。我期待看到:

ISODate("2013-12-13T02:15:16.663+05:00").

我对预期的 ISODate 对象的假设是否正确?我该如何解决这个问题?

【问题讨论】:

    标签: mongodb datetime ubuntu


    【解决方案1】:

    看来 MongoDB shell 报告的日期正确。

    ISODate("2013-12-13T21:15:16.663+19:00")
    

    您说的时间大约是 12 月 13 日凌晨 2:15,在您所在的位置,UTC 时间。那是 21:15,偏移 +19 小时,这是 MongoDB 显示的。我不确定为什么它会显示带有该偏移量的日期?!?

    由于您是pymongo 驱动程序,请查看数据库连接类的tz_aware 选项。默认值为False,这意味着您在应用程序中获得了原始日期。设置为 True 以获取时区感知日期。

    【讨论】:

    • 是的,你说得对。在 pymongo 中,我在不使用 tz_aware 的情况下插入时间戳 - 我正在使用 datetime.datetime.now() - 这是不正确的。我将其更改为 datetime.datetime.utcnow()。随着这一变化,我在 iOS 中看到了正确的时间。是的,偏移量也让我感到困惑 - 我没有看到任何配置或其他任何我可以更改的地方!我也将服务器移到 UTC - 而不是 EST
    • 实际上。 Flask-PyMongo 总是使用时区感知的日期时间对象。也就是说,它在创建连接时将 tz_aware 参数设置为 True。从 MongoDB 返回的 datetime 对象的时区将始终为 UTC。这让我有点困惑,为什么 datetime.datetime.now() 没有被转换为 UTC
    • 解决了.. Robomongo - 正在这样做!在向我显示日期之前,它正在转换日期。该死。
    • 很高兴你解决了它。顺便说一句,在 Python 方面,datetime.datetime.now() 为您提供了一个幼稚的对象。天真的日期时间没有时区信息,因此它们不能安全地转换为感知对象。可能,驱动程序假设您的日期时间对象是 UTC,并将它们按原样插入数据库中,但它们是本地时间,导致感知到 5 小时偏移。
    • 这是有道理的。感谢您的帮助。
    猜你喜欢
    • 2022-01-14
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2012-08-11
    • 2022-11-04
    • 2020-12-12
    • 2018-06-06
    相关资源
    最近更新 更多