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()을 사용하는 것이 좋습니다.