[英]PyMongo storing ISODate without milliseconds when milliseconds are zero
今天運行腳本后,我注意到一些文檔的created_on時間看起來像:
ISODate(“ 2013-05-30T17:46:55Z”) 否
ISODate(“ 2013-05-30T21:08:02.261Z”) 大多數行的毫秒數
解析前一個..my代碼時,期望的是毫秒數:
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”)存儲在文檔中,以便解析器可以保持一致?
一種選擇是,將日期時間存儲為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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.