Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 calendar.timegm()과 time.mktime()의 차이점 완벽 정리

Python에서 날짜와 시간을 다룰 때 calendar.timegm()time.mktime()은 비슷해 보이지만 서로 다른 시간대를 기준으로 동작합니다. 두 함수의 차이를 명확히 이해하면 시간 계산 오류를 예방할 수 있습니다.

두 함수의 핵심 차이

Python의 날짜·시간 관련 함수나 모듈은 별도로 지정하지 않는 한 모든 시간을 현지 시간대(Local Time Zone) 기준으로 해석합니다.

  • time.mktime(): 전달된 시간 튜플(tuple)을 현지 시간(local time)으로 간주합니다.
  • calendar.timegm(): 전달된 시간 튜플을 GMT/UTC 시간으로 간주합니다.

동일한 튜플이라도 어떤 시간대로 해석되느냐에 따라 실제 나타내는 시각이 달라지므로, 두 함수는 서로 다른 값을 반환합니다. 에포크(epoch, 1970년 1월 1일) 이후 경과 초는 UTC 기준으로 계산되기 때문입니다.

반환값 차이의 의미

두 함수가 반환하는 값의 차이는 곧 현지 시간대의 UTC 오프셋(시간대 오프셋)과 같습니다. 예를 들어 한국(KST, UTC+9)에서 실행하면 약 9시간(32,400초) 차이가 발생합니다.

예제 코드

import calendar
import time
from datetime import datetime

dt = datetime(2017, 12, 31)
print(time.mktime(dt.timetuple()))
print(calendar.timegm(dt.timetuple()))

실행 결과

1514658600.0
1514678400

위 결과에서 두 값의 차이는 19,800초로, 실행 환경의 현지 시간대 오프셋에 해당합니다. 즉, 같은 datetime 객체라도 time.mktime()은 현지 시간 기준으로, calendar.timegm()은 UTC 기준으로 변환한다는 점을 확인할 수 있습니다.

정리

현지 시간 기준으로 타임스탬프를 얻으려면 time.mktime()을, 시간대에 영향받지 않는 일관된 UTC 기준 값이 필요하다면 calendar.timegm()을 사용하는 것이 좋습니다.