使用 pymongo 创建时区感知 ISODate
Create timezone-aware ISODate with pymongo
我正在寻找一种在 mongoDB 中存储时区感知 datetime
对象的方法。
我在这里读到:Create an ISODate with pyMongo 使用 pymongo 在 MongoDB 中存储一个 datetime
对象将导致存储一个 ISODate
对象(或者一个看起来像这是从 shell)
查询时
使用 datetime.replace(tzinfo=[...])
方法,有一种方法可以让 datetime 对象知道它的时区。不幸的是,在 mongoDB 中存储此类对象时,时区信息似乎丢失了。
我的问题是:有没有办法将时区存储在 ISODate 对象本身中,使其看起来像这样:ISODate("2012-07-14T01:00:00+01:00")
在查询 shell 时,日期时间稍后使用 pymongo 重新加载时,对象仍然可以识别时区?
非常感谢您的帮助!
不,没有办法做到这一点。 MongoDB 的 ISODate
只是一个 Date
对象的包装器,它只是一个时间时刻,由一个整数表示,对应于自 1970 年 1 月 1 日 UTC 以来经过的毫秒数。它无法保留偏移量。
您可能会考虑将其作为字符串存储,也许在辅助字段中,这样您仍然可以在知道本地时间和偏移量的同时及时查询该时刻。
此外,假设您正在使用来自 pytz 或 dateutil 的 tzdb 时区,例如 "Europe/London"
,您应该认识到无法仅从偏移量确定时区。因此,如果您真的需要重建一个完整的 tz 感知日期时间,那么您还必须将时区标识符存储在一个单独的字段中。
from datetime import datetime
from dateutil.tz import *
def to_utc(date_time):
return date_time.replace(tzinfo=tzlocal()).astimezone(tzoffset(None, 0))
我正在寻找一种在 mongoDB 中存储时区感知 datetime
对象的方法。
我在这里读到:Create an ISODate with pyMongo 使用 pymongo 在 MongoDB 中存储一个 datetime
对象将导致存储一个 ISODate
对象(或者一个看起来像这是从 shell)
使用 datetime.replace(tzinfo=[...])
方法,有一种方法可以让 datetime 对象知道它的时区。不幸的是,在 mongoDB 中存储此类对象时,时区信息似乎丢失了。
我的问题是:有没有办法将时区存储在 ISODate 对象本身中,使其看起来像这样:ISODate("2012-07-14T01:00:00+01:00")
在查询 shell 时,日期时间稍后使用 pymongo 重新加载时,对象仍然可以识别时区?
非常感谢您的帮助!
不,没有办法做到这一点。 MongoDB 的 ISODate
只是一个 Date
对象的包装器,它只是一个时间时刻,由一个整数表示,对应于自 1970 年 1 月 1 日 UTC 以来经过的毫秒数。它无法保留偏移量。
您可能会考虑将其作为字符串存储,也许在辅助字段中,这样您仍然可以在知道本地时间和偏移量的同时及时查询该时刻。
此外,假设您正在使用来自 pytz 或 dateutil 的 tzdb 时区,例如 "Europe/London"
,您应该认识到无法仅从偏移量确定时区。因此,如果您真的需要重建一个完整的 tz 感知日期时间,那么您还必须将时区标识符存储在一个单独的字段中。
from datetime import datetime
from dateutil.tz import *
def to_utc(date_time):
return date_time.replace(tzinfo=tzlocal()).astimezone(tzoffset(None, 0))