今天运行脚本后,我注意到我的某些文档的created_on时间如下:
ISODate(“2013-05-30T17:46:55Z”) no millis
ISODate(“2013-05-30T21:08:02.261Z”)大多数行的毫秒
解析前一个代码时,我的代码期望millis在那里:
dt = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S.%f')
File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime (data_string, format))
ValueError: time data '2013-05-30 17:46:55' does not match format '%Y-%m-%d %H:%M:%S.%f'
如何确保ISODate(“2013-05-30T17:46:55.0000Z”)存储在文档中以便解析器可以保持一致?
答案 0 :(得分:2)
一个选项是,将日期时间存储为MongoDB中的日期时间,而不是字符串。然后你不需要用strptime
解析它们以便将日期时间取消并且毫秒没有问题:
>>> dt = datetime.now()
>>> str(dt)
'2013-06-03 13:04:22.976182'
>>> db.collection.insert({'now': dt})
ObjectId('51accca7ca1ce90a4277ac20')
>>> dt = datetime.now().replace(microsecond=0)
>>> str(dt)
'2013-06-03 13:04:47'
>>> db.collection.insert({'now': dt})
ObjectId('51acccb6ca1ce90a4277ac21')
>>> pprint.pprint(list(db.collection.find({}, {'now': True, '_id': False})))
[{u'now': datetime.datetime(2013, 6, 3, 13, 4, 22, 976000)},
{u'now': datetime.datetime(2013, 6, 3, 13, 4, 47)}]
如果您改变存储日期时间的方式为时已晚,您可以pip install python-dateutil
并执行:
>>> from dateutil.parser import parse
>>> parse('2013-06-03 13:04:22.976182')
datetime.datetime(2013, 6, 3, 13, 4, 22, 976182)
>>> parse('2013-06-03 13:04:22')
datetime.datetime(2013, 6, 3, 13, 4, 22)