이번 시간에는 파이썬에서 지역 시간대 정보를 가져오기 위해 많이 쓰는 pytz를 간단하게 알아보겠습니다.

 


 먼저 pytz.all_timezones는 사용할 수 있는 모든 timezone의 목록들을 모두 돌려줍니다.

 

 여러 가지 timezone이 나오네요. 당연하게도 이 목록 중에는 Asia/Seoul도 있습니다.

 

 이 pytz는 특정한 데이터베이스로부터 timezone 정의를 불러옵니다. 예를 들어, 서울 시간은 utc보다 9시간 빠르다는 정보입니다. 그래서 현재 방콕 시간을 알려주는, 즉 지역 시간을 알려주는 프로그램을 만들 때 유용하게 쓰일 수 있습니다. 지역 시간을 구하기 위해서는 지역의 timezone을 알아야 하는데요. 이를 pytz가 제공하기 때문입니다.

 

 

 datetime.now 안에 timezone 정보를 집어넣으면 지역 시간을 구해준다고 하였어요. datetime의 timezone.utc 대신에 pytz의 timezone을 넣었어요. 방콕의 시간대는 "Asia/Bangkok"입니다. 이를 넣고 방콕 시간을 출력해 보면 아래와 같습니다.

 

 21시 30분이라고 하는군요.

 


 그러면 모든 시간대의 현재 지역 시간을 구할 수 있을까요? 이것도 조금만 응용하면 가능합니다. 예제 2를 봅시다.

 

 먼저, datetime.now(pytz.timezone(tz))까지 넣으면 해당 시간대의 시간을 얻어옵니다. 여기서 utcoffset() 함수를 호출하면, utc로부터 몇 시간 빠른지, 혹은 느린지를 돌려줍니다. 그 다음에 total_seconds로 이를 초 단위로 변환합니다.

 

 다음에 second를 hh:mm 형식으로 바꿉니다.

 

 그러면 긱 시간대별로 utc 기준 몇 시간 빠르거나 느린지를 알려줍니다. 이제, 가장 빠른 시간대를 구해 볼까요?

 

 대략적인 logic은 예제 2와 똑같습니다.

 

 다음에, tz_data에 tuple 형태로 뭔가를 넣는데요. utc로부터 몇 시간 빠르거나 느린지에 대한 데이터를 tuple의 1번째 원소로 넣어버립니다. 그리고 17번째 줄에서 sorted를 이용해서 정렬한 다음에, tz_data를 돌면서 tz_data에 넣은 정보들을 출력하게 됩니다. 1번째 정렬기준은 제일 느린 시간대가 먼저 오게 될 것입니다. 따라서, 맨 마지막에 출력되는 것이 제일 빠른 시간대가 되겠네요.

 

 

 Kiritimati가 제일 빠른 시간대가 됩니다. 우리보다 5시간이나 빠르네요.