使用 pymongo 创建时区感知的 ISODate

Rom*_*n G 4 python timezone datetime mongodb pymongo

我正在寻找一种在 mongoDB 中存储时区感知datetime对象的方法。

我在这里读到:使用 pyMongo 创建 ISODate,使用 pymongo 在 MongoDB 中存储datetime对象将导致ISODate存储一个对象(或者从 shell 查询时看起来像这样的对象)

使用该datetime.replace(tzinfo=[...])方法,有一种方法可以使日期时间对象了解其时区。不幸的是,当将此类对象存储在 mongoDB 中时,时区信息似乎丢失了。

我的问题是:有没有办法将时区存储在 ISODate 对象本身中,以便它看起来像这样:ISODate("2012-07-14T01:00:00+01:00")在查询 shell 时,以便稍后用 pymongo 重新加载时 datetime 对象仍然能够识别时区?

非常感谢你的帮助!

Mat*_*int 5

不,没有办法做到这一点。MongoDBISODate只是一个Date对象的包装器,该对象只是一个由整数表示的时间点,该整数对应于自 1970 年 1 月 1 日 UTC 以来经过的毫秒数。它没有办法保留偏移量。

您可能会考虑将其存储为字符串,也许存储在辅助字段中,这样您仍然可以及时查询该时刻,同时仍然知道本地时间和偏移量。

另外,假设您使用 pytz 或 dateutil 中的 tzdb 时区(例如 )"Europe/London",您应该认识到无法仅根据偏移量确定时区。因此,如果您确实需要重建完整的 tz 感知日期时间,那么您还必须将时区标识符存储在单独的字段中。