簡體   English   中英

當毫秒為零時,PyMongo不以毫秒為單位存儲ISODate

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM