안녕하세요. 이번 시간에는 datetime.datetime에 있는 astimezone 함수에 대해서 알아봅시다.

 


 현재 제 컴퓨터의 표준 시간대는 UTC +09:00 서울입니다. utc 시간대보다 9시간 빠르다는 의미입니다.

 

 datetime.strptime은 문자열을 datetime.datetime으로 바꿔줍니다. 4번째 줄에서 v.tzinfo를 출력합니다.

 

 다음에, pytz의 timezone을 이용해서 타임존을 "America/New_York"으로 바꿔주는데요. 여기서 중요한 것은, UTC 시간은 같지만, 로컬 시간에 맞춰서 변경됩니다. 이게 무슨 소리인가? 기준 시간은 같지만 로컬 시간이 다르다는 의미입니다. utc 시간은 같지만, 이를 지역 시간에 맞춰 출력한다는 이야기입니다. 출력 결과를 보면서 이야기 해 보겠습니다.

 

 

 먼저 datetime의 tzinfo가 None이였습니다.

 

 

 astimezone의 경우 tz가 None인 경우 local timezone을 쓰게 됩니다. 제 컴퓨터의 표준 시간대는 서울 시간이였으니, Asia/Seoul이 됩니다. 즉, 2022년 12월 31일 0시 0분 0초라고 가정한 것입니다. 서울 시간대로. 그런데, 뉴욕은 utc보다 5시간 느립니다. 고로, 서울 시간대보다는 14시간 느립니다.

 

 12월 31일 0시 0분 0초보다 14시간 느리면, 12월 30일 10시가 되겠지요. 따라서, 출력은 2022년 12월 30일 10:00:00-05:00이 됩니다.

 


 

 하나 질문. 제 시간대를 타이베이 시간대로 바꾸면 어떻게 될까요?

 

  타이베이는 utc보다 8시간 빠릅니다. 따라서 뉴욕보다는 13시간 빠를 겁니다. 타임존 정보가 아무것도 전달되지 않았끼 때문에, 12월 31일 0시 0분 0초는, 로컬 시간대 타이베이로 가정합니다. 따라서, 이 시간을 뉴욕 시간으로 출력하면, 2022년 12월 30일 11시 0분 0초가 됩니다.

 

 타임존 정보를 빼려면 뒤에 -05:00을 빼 버리면 되겠네요. 역으로 현재 시간대 이름을 알 수 있을까요?

 

 astimezone()에 아무 인자도 넣지 않으면 로컬 시간대로 가정한다고 했습니다. astimezone()을 호출한 다음에, tzinfo를 보겠습니다.

 

 그러면 타이베이 표준시가 나옴을 알 수 있습니다. 이제 다시 서울 시간대로 바꾸었습니다. utc로부터 얼마만큼 빠른지는 어떻게 알아낼 수 있을까요?

 

 utcoffset() 함수를 쓰면 됩니다. datetime.datetime에 utcoffset 함수를 써 보겠습니다.

 

 그러면 9:00:00이 나옵니다. 이는 utc 기준시로부터 9시간 앞섰다는 것을 의미합니다.