2012-01-05 2 views
3

나는 다소 기본적인 질문이 있습니다. 모음의 항목에 대한 날짜 시간은 GMT 형식으로되어특정 시간대에 대한 mongodb datetime 출력 쿼리

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

로 저장됩니다. 쿼리 결과가 EST 형식이되도록 항목을 어떻게 쿼리합니까? 이 질문 자체에서 가능하거나 5 시간 (ESt = -5.00 시간)을 수동으로 뺄 필요가 있습니까? 내가 사용한 쿼리는 다음과 같습니다.

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

편집 : 내가 쿼리와 같은 반환 된 타임 스탬프를 사용하고 파이썬을 사용;

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을 적용 할 수 있습니다.

루비를 사용한다면, 당신은 스스로 날짜를 빼거나 (그런 메커니즘에 대해서는 모른다).

다른 언어 - 그가에 가정 (로 MongoDB를 저장 날짜가 항상 저장되어있는 것처럼, 항상 UTC에서 시간을 나타냅니다 pymongo에 의해 반환 datetime 객체 -