Проблема с часовыми поясами в pymongo / mongodb

#mongodb #pymongo

#mongodb #pymongo

Вопрос:

У меня есть эта функция, которая анализирует даты в моей базе данных

 def parserQuestions():   
    res=db.questionsActual.find({'date_created':{'$type':'string'}})
    for doc in res:
        db.questionsActual.update_one({'_id': doc.get('_id')}, {'$set': { 'date_created': parse(doc.get('date_created'))}})
 

Мой формат ввода:

2020-12-11T13:23:58.677-04:00

но когда я применяю функцию, результат:

2020-12-11T13:23:58.677.000Z

Как я могу сохранить часовой пояс? или, что еще лучше, могу ли я установить свой собственный часовой пояс?

желаемый результат:

2020-12-11T13:23:58.677-04:00

Ответ №1:

date Тип BSON в MongoDB всегда сохраняет даты как дату / время UTC, поэтому вы не можете сохранить смещение непосредственно в date поле BSON. Вы можете сохранить свое смещение в отдельном поле с чем-то вроде:

 from pymongo import MongoClient
from dateutil import parser

db = MongoClient()['mydatabase']

dt = parser.parse('2020-12-11T13:23:58.677-04:00')

db.questionsActual.insert_one({'date': dt, 'offsetSeconds': dt.tzinfo.utcoffset(dt).total_seconds()})

print(db.questionsActual.find_one({}, {'_id': 0}))
 

выдает:

 {'date': datetime.datetime(2020, 12, 11, 17, 23, 58, 677000), 'offsetSeconds': -14400.0}