disruptive
disruptive

Reputation: 5946

Dealing with timezone dates in MongoDB and pymongo

I do not seem to be able to query records and get what I expect. For example I am searching

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

I have the following date specified in MongoDB:

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

But I get no results! Is this down to the timezone which appears in the MongoDB date which is screwing things up.

Upvotes: 2

Views: 1480

Answers (2)

squanto773
squanto773

Reputation: 544

This is just a typing error:

Try with the following code:

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

You forgot about the $ sign in $gt.

Upvotes: 1

Alexis
Alexis

Reputation: 64

Use an aware datetime object (with timezone info).

# 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})

To use a different timezone to localize, try something like pytz.timezone('US/Mountain')

P.S. you'll need pip install pytz

Upvotes: 1

Related Questions