PYTZ : 타임 존 사이를 변환 할 때 정상화가 필요한 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1422880

  •  07-07-2019
  •  | 
  •  

문제

나는 그렇게 완전하지 않은 것을 읽고 있습니다 PYTZ 문서 그리고 나는 그것의 한 부분을 이해하는 데 붙어 있습니다.

Timezones 사이를 변환하는 데는 특별한주의가 필요합니다. 또한 변환이 올바른지 확인하기 위해 Normalize 메소드를 사용해야합니다.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

나는 바로이 예를 시도했다 없이 사용 normalize 그리고 그것은 똑같이 판명되었습니다. 제 생각 에이 예는 실제로 설명하지 않습니다 우리는 사용해야합니다 normalize 사이를 변환 할 때 datetime 다른 시간의 물체.

누군가 나에게주세요 예시 (위의 것과 유사) 사용하지 않을 때 결과가 다른 곳 normalize.

감사

도움이 되었습니까?

해결책

PYTZ 문서에서 :

또한, DST 경계를 넘어서는 로컬 시간에 날짜 산술을 수행하는 경우 결과는 잘못된 시간대 일 수 있습니다 (예 : 2002-10-27 1:00 EST에서 1 분을 빼고 2002-10-27 0 : 올바른 2002-10-27 1:59 EDT 대신 59 EST. 이를 수정하기 위해 정규화 () 메소드가 제공됩니다. 불행히도 이러한 문제는 Python DateTime 구현을 수정하지 않고는 해결할 수 없습니다.

다른 팁

문서는 정상화가 DST 문제의 해결 방법으로 사용된다고 말합니다.

또한, DST 경계를 넘어서는 로컬 시간에 날짜 산술을 수행하는 경우 결과는 잘못된 시간대 일 수 있습니다 (예 : 2002-10-27 1:00 EST에서 1 분을 빼고 2002-10-27 0 : 올바른 2002-10-27 1:59 EDT 대신 59 EST. 이를 수정하기 위해 정규화 () 메소드가 제공됩니다.

따라서 DST와 관련된 일부 가장자리 케이스를 수정하는 데 사용됩니다. DST Timezones (예 : UTC)를 사용하지 않는 경우 정상화를 사용할 필요는 없습니다.

사용하지 않으면 특정 상황에서 전환이 1 시간이 걸릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top