python의 datetime에는 now 함수가 있습니다. 간단하게 알아보도록 하겠습니다.

 


 datetime의 now는 현재 시간을 출력해 줍니다. v.utcoffset으로 utc로부터 몇 시간 빠른지에 대한 정보를 출력합니다. 그리고, 현재 시간을 출력해 보겠습니다.

 

 1번째 결과는 None이 나옵니다. 이는 utc로부터 몇 시간이 앞서있는지에 대한 정보가 없다는 것을 의미합니다. 다음에 현재 시간을 출력하였습니다. 3월 3일 23시 22분 47초라고 나오는군요. 여기서 문제. 어느 지역에서의 시간일까요? 도쿄? 오사카? 아니면 테헤란? 서울?

 

 사실 저는 서울 시간대에 살고 있기 때문에, 단번에 서울 시간이라고 생각하실 수 있습니다.

 

 그러면 이건 어떨까요? 현재 시간을 출력해 보니 3월 3일 17시 54분 47초라고 합니다. 어? 아까 스크린샷에 비해서 5시간 30분이 느리군요. 그러면 이 사진. 실제로 5시간 전에 찍힌 사진일까요?

 

 

 아닙니다. 실제로는 23시 25분에 찍혔습니다. 어떤 비밀이 숨겨져 있을까요?

 

 

 이는 제가 제 컴퓨터의 시간대를 잠깐 테헤란 시간대로 바꾸어 놓았기 때문입니다. tzinfo가 주어져 있지 않은 경우, 컴퓨터의 지역 시간을 출력하게 됩니다. 다시 말해, timezone 정보가 datetime에 없다면, 어느 지역에서의 시간인지를 모르게 됩니다. 같은 9시라도 한국 시간대로 9시인 것과, 테헤란 시간대로 9시인 것은 다르기 때문입니다. 그러면 어떻게 해 주어야 하는가?

 

 timezone 정보를 주어야 합니다.

 


 제일 간단한 방법은 datetime.timezone의 utc를 넘겨주는 방법입니다. 3번째 줄을 보시면 현재 시간을 utc 시간대로 바꾸고, 타임존 정보까지 채웁니다. 위 프로그램을 실행시켜 보겠습니다.

 

 timezone 정보를 뽑아보니 0:00:00으로 나옵니다. utc 시간보다 0시간이 빠르다는 의미입니다. 그리고, datetime도 출력해 보니, 뒤에 +00:00이 붙어있는 것을 볼 수 있습니다. 이렇게 바꾸면 뭐가 될까요? 최소한 이 시간이 utc 시간대구나. 테헤란과 같은 시간대구나. 정도는 알 수 있습니다. 뒤에 +hh:mm이 붙어버리기 때문입니다.

 

 만약에, 현재 시간을 서울 시간대로 보고 싶다면 어떻게 하면 될까요? 이 때에는 pytz.timezone을 이용하면 됩니다. 그리고, 서울의 시간대는 "Asia/Seoul"이기 때문에, 그냥 pytz.timezone("Asia/Seoul")을 넣어주면 됩니다. 그러면 서울 시간대 정보가 들어가게 됩니다.

 

 

 이 예제 프로그램을 실행시키면 utcoffset이 9:00:00이 나옵니다. utc 시간대보다 9시간 빠르다는 의미입니다. 다음에, 현재 시간을 출력하니, 뒤에 +09:00이 붙었습니다.

 

 

 만약에 기존에 utc로 주어진 시간대를 서울 시간대로 바꾸려면 어떻게 하면 좋을까요? 저번에 배운 astimezone을 이용하면 됩니다. 6번째 줄은 시간대 정보가 있는 현재 시간을 Seoul 지역시간으로 바꿉니다.

 

 실행 결과는 위와 같습니다.