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