1

今天运行脚本后,我注意到我的一些文档的 created_on 时间如下所示:

ISODate("2013-05-30T17:46:55Z")没有毫秒

大多数行的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") 存储在文档中,以便解析器保持一致?

4

1 回答 1

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)
于 2013-06-03T17:13:51.790 回答