Python/Mongoengine-保存到数据库时是否缺少时区?
使用MongoEngine将日期对象保存到Mongo时遇到问题。这是我的密码:Python/Mongoengine-保存到数据库时是否缺少时区?,python,mongoengine,python-dateutil,Python,Mongoengine,Python Dateutil,使用MongoEngine将日期对象保存到Mongo时遇到问题。这是我的密码: print isodate >>> 2014-07-01T20:00:00.000Z import pytz from dateutil import parser tz = pytz.timezone('Europe/London') start = parser.parse(isodate).replace(tzinfo=None) start = tz.localize(start) p
print isodate
>>> 2014-07-01T20:00:00.000Z
import pytz
from dateutil import parser
tz = pytz.timezone('Europe/London')
start = parser.parse(isodate).replace(tzinfo=None)
start = tz.localize(start)
print start
>>> 2014-07-01 20:00:00+01:00
本地化日期似乎效果不错,但保存到Mongo时:
f = Fixture(
start=start
)
当我看到创建的Mongo文档时,出现了以下奇怪的情况:
{
_id: ObjectId("53b1dfbde20b47102c824a8f"),
start: ISODate("2014-07-01T19:00:00Z")
}
有什么原因导致时间缩短两小时,时区不再存在吗?我觉得您误解了日期时间格式。参考:
print isodate
>>> 2014-07-01T20:00:00.000Z
import pytz
from dateutil import parser
local_tz = pytz.timezone('Europe/London')
local_time = parser.parse(isodate).astimezone(local_tz)
print local_time
>>> 2014-07-01 21:00:00+01:00
如果您需要在本地时间执行日期算术,请再执行一个步骤(请参阅:):
实际上,您可以直接将“…T…Z”ISODate保存到Mongo,而无需转换为本地时间。因为它已经包含时区信息,所以不需要转换。时间不会缩短两个小时
19:00:00Z
和20:00:00+01:00
是同一时间Z
是UTC时区,即+00:00
local_tz.normalize(local_time)