2017-04-20 1 views
0

Linux에서는 pytz를 사용하여 시간대 변환 시간을 얻으려고합니다. 그러나 아래의 코드는 정확한 'Asial/Seoul'시간을 반환하지 않습니다.Python pytz timezone은 UTC 시간과 동일합니다.

from datetime import datetime 
from pytz 
seoul = pytz.timezone('Asia/Seoul') 
curtime = seoul.localize(datetime.now()) 

이것은 Linux에서 테스트 한 방법입니다. datetime.now()는 UTC 시간을 반환합니다. 그리고 '아시아/서울'과 함께 pytz 시간대도 같은 UTC 시간을 반환합니다.

enter image description here

나는 pytz와 정확한 시간대의 시간을 얻을 수있는 방법 답을 찾고 있어요.

답변

1

naive로 지역화하는 경우 datetime입니다. 즉, 시간대 정보가없는 datetime이 있음을 의미합니다. localize을 사용하면 이전에 아무 것도 없었던 시간대 정보가 첨부됩니다. 비교 :

>>> datetime.now() 
datetime.datetime(2017, 4, 20, 14, 0, 0, 0) 
>>> seoul.localize(datetime.now()) 
datetime.datetime(2017, 4, 20, 14, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

시간대 정보가있는 경우와없는 시간은 같은 시간입니다.

>>> datetime.now(tz=seoul) 
datetime.datetime(2017, 4, 20, 21, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

가 아니면, 이미 시간대가있는 타임 스탬프를 가지고 가고, 변환 : 당신이 서울에 현재 시간을 얻고 싶은 경우에

, 당신은 그 시간대로 datetime을 작성해야합니다 : 즉 본질적으로 아무런 의미가 없기 때문에

>>> datetime.now(tz=timezone.utc).astimezone(seoul) 
datetime.datetime(2017, 4, 20, 21, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

당신은, (시간대 없음) 순진한 타임 스탬프에서 시간대 변환을 할 수 없습니다.

+0

감사합니다. 이제는'datetime.now (tz = seoul) '와 함께 작동합니다. – Justin

-1
from datetime import datetime 
import pytz 
seoul = pytz.timezone('Asia/Seoul') 
curtime = seoul.localize(datetime.now()) 

이것은 옳습니다.

리눅스에서 date -R의 출력을 보여줄 수 있습니까? 나는 당신의 mechine의 tz가 utc라고 추정한다.

+0

예, 내 컴퓨터의 시간대는 utc입니다. – Justin

+0

'seoul.localize (datetimenow())와'seoul.localize (datetime.utcnow()) '가 같은 이유입니다. – Cheney

관련 문제