Работа с датами часовых поясов в MongoDB и pymongo

#python #mongodb #pymongo

#python #mongodb #pymongo

Вопрос:

Кажется, я не могу запрашивать записи и получать то, что ожидаю. Например, я ищу

 today = datetime.datetime.today()
past = today   timedelta(days=-200)
results = mongo.stuff.find({"date_added": {"gt": past}}, {"id":1})
  

У меня есть следующая дата, указанная в MongoDB:

 "date_added": {
        "$date": "2016-04-19T18:47:54.101Z"
    },
  

Но я не получаю никаких результатов! Это связано с часовым поясом, который отображается в дате MongoDB, что все портит.

Ответ №1:

Это просто ошибка ввода:

Попробуйте использовать следующий код:

 results = mongo.stuff.find({"date_added": {"$gt": past}}, {"id":1})
  

Вы забыли о знаке $ в $ gt.

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

1. Ах да! Меня все время достает!

Ответ №2:

Используйте осведомленный объект datetime (с информацией о часовом поясе).

 # E.g. with UTC timezone : 
import pytz
import datetime

today = datetime.datetime.today()
past = today   timedelta(days=-200)

pytc.utc.localize(past)

results = mongo.stuff.find({"date_added": {"gt": past}}, {"id":1})
  

Чтобы использовать другой часовой пояс для локализации, попробуйте что-то вроде pytz.timezone('US/Mountain')

PS вам понадобится pip install pytz

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

1. Я пробовал это — любые варианты — но, к сожалению, не сработало.