2012-01-05 18 views
3

私はかなり基本的な質問があります。コレクション内のエントリの 日付時間はGMT形式であるmongodb日時の出力を特定のタイムゾーンに照会する

"lastUpdated": ISODate("2011-12-07T02:46:51.101Z") 

として保存されます。クエリの出力がEST形式になるようにエントリをクエリするにはどうすればよいですか? これはクエリ自体で可能ですか、手動で5時間(ESt = -5.00時間)を引く必要がありますか? 私が使用したクエリは次のとおりです。

db.Collection.find({Type: 'Reports', patId: 'JOHNSONGARY'}, 
         {'lastUpdated': 1}) 

EDIT: 私は照会し、そのように返されたタイムスタンプを使用していますためのpythonを使用します。

str(mongo_documents['lastUpdated'].strftime('%Y-%m-%d %H:%M:%S')) 

このコマンドでは5時間をどのように差し引くのですか?

答えて

6

チェックアウトdocumentation :-)見当がつかないUTC

pymongoは、接続を作成するときにtz_infoフラグをTrueに設定すると、datetimesを自動的にタイムゾーン対応に変換できます。必要に応じてdatetime.astimezone()メソッドを使用して別のタイムゾーンに変換することができます。

あなたはタイムゾーンのためpytzを使用することができたり、あなただけESTが独自に書く必要があるのであれば、たとえば:

# Get now for EST 
now = datetime.datetime.now(EST) 
print now.strftime('%Y-%m-%d %H:%M:%S') 

from pymongo import Connection 
# Create a timezone aware connection 
connection = Connection('localhost', 27017, tz_aware=True) 

# Save your data 
db = connection.test_database 
db.stackoverflow.save({"Type": "reports", "patId": 'JOHNSONGARY', "lastUpdated": now}) 

doc = db.stackoverflow.find()[0] 
print doc['lastUpdated'].astimezone(EST).strftime('%Y-%m-%d %H:%M:%S') 

# Confirm they are the same 
assert doc['lastUpdated'].astimezone(EST).strftime('%Y-%m-%d %H:%M:%S') == now.strftime('%Y-%m-%d %H:%M:%S') 

import datetime 

class Eastern(datetime.tzinfo): 

    def utcoffset(self, dt): 
     return datetime.timedelta(hours=-5) 

    def tzname(self, dt): 
     return "EST" 

    def dst(self, dt): 
     return datetime.timedelta(0) 


EST = Eastern() 

その後、あなたはこれを行うことができます

0

C#を使用している場合は、this answerを適用できます。

Rubyを使用している場合は、自分で日付を引く必要があります(または、そのような仕組みについてはわかりません)。

他の言語は - それは、と仮定される(ようにMongoDBに保存された日付が常に保存されているのと同様に、常にUTCの時刻を表すpymongoによって返さdatetimeオブジェクト -

関連する問題