Преобразовать MongoDB bson.int64.Int64 обратно в длинное число (и datetime)

#python-3.x #pymongo #bson

#python-3.x #pymongo #bson

Вопрос:

Данные в MongoDB хранятся следующим образом, вероятно, это должен был быть ISODate, но это не так:

 "timestamp": {
    "$numberLong": "1599142085021078272"
},
  

В Python 3 я извлекаю данные и делаю это:

 testDateTimeStamp = doc['timestamp']
print ("testDateTimeStamp:", testDateTimeStamp, " type=", type(testDateTimeStamp))
rowDateTime = datetime1.datetime.fromtimestamp(testDateTimeStamp)
  

Команда print, похоже, распутывает его и показывает это, но как мне преобразовать его обратно в datetime в моем коде?

 testDateTimeStamp: 1599152715643496874  type= <class 'bson.int64.Int64'>
  

затем он выдает ошибку:

Ошибка ОС: [Ошибка 22] Недопустимый аргумент

Комментарии:

1. 1599142085021078272 это к дате или времени?

2. Это время, с большой точностью.

3. Вы можете вставить его сюда: epochconverter.com

4. вау, это здорово! полезно знать эту информацию

Ответ №1:

Это моя первая попытка заставить его работать. Если есть лучший способ, пожалуйста, дайте мне знать. Я помнил, что ранее мне приходилось делить, чтобы избавиться от наносекунд.

 one_minute = datetime1.timedelta(minutes=1)
testDateTimeStamp = int(int(doc['timestamp']) / 1000000000)
print ("testDateTimeStamp:", testDateTimeStamp, " type=", type(testDateTimeStamp))
rowDateTime = datetime1.datetime.fromtimestamp(testDateTimeStamp)