2014-09-07 5 views
4

두 개의 time 개체를 서로 다른 시간대로 비교하고 실제로 시간/분/초 구성 요소 만 테스트하여 실제로 시간대를 무시하는 것처럼 보입니다.시간대가 다른 두 개의 '시간'개체 비교

의 두 time 개체를 만들어 보자 : 그들을 인쇄

from datetime import time 
import pytz 

CET = pytz.timezone('CET') 
Japan = pytz.timezone('Japan') 

t1 = time(1,2,3, tzinfo=CET) 
t2 = time(1,2,3, tzinfo=Japan) 

을, 우리는 그들이 꽤 다르다 볼 :

datetime.time(1, 2, 3, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>) 
datetime.time(1, 2, 3, tzinfo=<DstTzInfo 'Japan' JST+9:00:00 STD>) 

을 지금의 그들을 비교하자

t1 == t2 
#-> True 

흠 , 뭐? 파이썬이 어떻게 그들을 동등하게 취급 할 수 있습니까? 순진하고 인식 시간 객체에 관한 문서에서

+0

아마 관련 : [UTC 시간과 동부 표준시 시간 비교하기] (http://stackoverflow.com/questions/10524165/comparing-a-time-in-utc-with-a-time-in- eastern-time-using-python? rq = 1) – kolypto

+0

어떤 Python 버전을 사용하고 있습니까? – MattDMo

+0

@MattDMo, 2.7입니다. 죄송합니다 :) – kolypto

답변

5

https://docs.python.org/2/library/datetime.html#datetime.tzinfo에 따라 "순진"입니다 t.tzinfoNone하지 않고 t.tzinfo.utcoffset(None)None을 반환하지 않는 경우

time 객체 t이 알고있다. 그렇지 않으면 t은 순진합니다.

print(t1.tzinfo, t1.tzinfo.utcoffset(None)) 
print(t2.tzinfo, t2.tzinfo.utcoffset(None)) 

우리를 제공합니다 :

(<DstTzInfo 'CET' CET+1:00:00 STD>, None) 
(<DstTzInfo 'Japan' JST+9:00:00 STD>, None) 

https://docs.python.org/2/library/datetime.html#module-datetime

본래의 목적이 명확하게 다른 날짜/시간 객체를 기준으로 자신을 찾을 수있는 충분한 정보를 포함하지 않습니다. 즉


: 객체는 어떤 일이없고 그래서 일광 절약 시간 적용 여부를 판단 할 수 없습니다. 그것들은 모호하고, 어느 쪽이든을 위해서 t.utcoffset()을 달면 None을 돌려 줄 것입니다. 시간대는 사실상 의미가 없기 때문에 완전히 무시됩니다.

+0

문제의 ** 이유 **를 설명하는 훌륭한 대답입니다 ... – MattDMo

+0

코드가'datetime'을 사용 했더라도; 그것은 틀릴 것이다. 순진한 datetime 객체를 timezone-aware로 만들려면'tz.localize()'를 사용해야합니다. – jfs

2

: t.tzinfo 없음을 반환하지 않습니다 없음과 t.tzinfo.utcoffset (없음)하지 않는 경우

타임 객체 t는 알고있다. 귀하의 경우에는

, t1.tzinfo.utcoffset(None)t2.tzinfo.utcoffset(None) 모두 t1t2 반환 None. 그러므로 당신의 물건은 순진하고 잘 모릅니다.

이렇게 효과적으로 '01 : 02 : 03 '과 '01 : 02 : 03'을 비교하면 True입니다. 두 시간 객체의

0

평등을 확인하려면 (t1,t1.tzinfo) == (t2, t2.tzinfo) 또는 t1.strftime('%H %M %S %Z') == t2.strftime('%H %M %S %Z')을 사용합니다.

derp explained 왜 파이썬은 t1과 t2를 동일하게 처리했으며 supported operations (Python docs)을 참조합니다.

의 참조 :

따르면 pytz docs

시간 처리하는 바람직한 방법은 항상 의해 판독 될 출력을 생성하는 경우에만 localtime과로 변환, UTC에서 작동하는 인간.

pytz docs

는 (지역화 및/또는 대체 사용하여) 시간 객체상에서 연산을 수행하기 aware time objects- naive time objects 또한 본 방법을 전환하는 방법을 도시한다.