HOWTO · Python
Python에서 Epoch를 Datetime으로 변환
Python에서 epoch를 날짜 시간으로 변환하는 방법을 소개합니다.
이 페이지의 내용
Unix epoch 시간은 1970-01-01 00:00:00 UTC부터 센 초의 수입니다. 1606262400과 같은 타임스탬프는 한 시점을 가리킵니다. 이를 읽기 쉬운 날짜로 변환하려면 시간대를 선택해야 합니다. 날짜와 시간 객체가 필요하면 datetime을, 작업에 struct_time 값이 적합하면 time을 사용하세요.
datetime.fromtimestamp()로 epoch 초 변환하기
Python의 datetime 모듈은 타임스탬프를 받아 datetime 객체를 반환하는 datetime.fromtimestamp()를 제공합니다. 기본적으로 타임스탬프를 컴퓨터의 현지 시간대로 해석하고, 시간대 정보가 없는 naive datetime을 반환합니다. UTC를 나타내는 aware datetime을 얻으려면 timezone.utc를 전달하세요.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from datetime import datetime, timezone
timestamp = 1606262400
utc_datetime = datetime.fromtimestamp(timestamp, timezone.utc)
print(utc_datetime)
클래스를 여러 번 사용할 때 가져오기 구문을 간결하게 쓰려면 from datetime import datetime을 작성한 뒤 datetime.fromtimestamp(...)를 호출하면 됩니다. fromtimestamp() 참고 문서에서 인수와 플랫폼별 동작을 확인할 수 있습니다. 이 로캘에 해당하는 대상 문서가 제공되지 않아 내부 링크는 기존 영어 경로를 가리킵니다. 시스템 간에 시점을 주고받을 때는 타임스탬프를 UTC로 유지한 다음, 애플리케이션 경계에서 표시용 시간대로 변환하세요.
time 모듈로 epoch 초 변환하기
Python의 time 모듈은 유용한 변환 함수 두 가지를 제공합니다. time.localtime()는 호스트의 현지 시간대로 해석한 9개 필드의 struct_time을 반환합니다. time.gmtime()는 이에 대응하는 UTC 기준 struct_time을 반환합니다. 이 값은 구조화된 시간 데이터이며 datetime 객체는 아닙니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import time
timestamp = 1554723620
local_value = time.localtime(timestamp)
utc_value = time.gmtime(timestamp)
print("Local:", local_value)
print("UTC:", utc_value)
현지 시간 결과는 시스템의 시간대 설정에 따라 달라지므로 시각 필드가 UTC 결과와 다를 수 있습니다. 일관된 UTC 필드가 필요하면 time.gmtime()를 사용하고, 호스트의 현지 표현이 필요하면 time.localtime()를 사용하세요.
변환한 날짜와 시간 서식화하기
time 값과 datetime 객체 모두 서식화에 strftime()를 사용할 수 있습니다. %Y, %m, %d, %H, %M, %S와 같은 지시자는 각각 연도, 월, 일, 시, 분, 초를 나타냅니다. %d는 날짜를 0으로 채워 두 자리로 표시하는 이식성 높은 지시자입니다. %-d는 일부 플랫폼에서 앞의 0을 생략하지만, 모든 플랫폼에서 지원되지는 않습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import time
timestamp = 1554723620
utc_value = time.gmtime(timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", utc_value))
같은 숫자 지시자를 사용해 datetime.strftime()로 서식화할 수도 있습니다. %A, %B처럼 이름을 출력하는 지시자와 로캘의 영향을 받는 %c는 시스템 로캘에 따라 달라질 수 있습니다. 따라서 기계가 읽는 데이터에는 이들이 출력하는 문구를 사용하지 마세요. 서식 지시자 참고 자료는 strftime.org에서 확인할 수 있습니다.
UTC, 시간대, 밀리초 타임스탬프 처리하기
타임스탬프는 UTC epoch를 기준으로 한 초를 나타내지만, 현지 시간으로 변환할 때는 컴퓨터에 설정된 시간대가 적용됩니다. 실제 시점을 나타내는 값을 저장하거나 계산할 때는 UTC aware 값을 사용하는 편이 좋습니다. 다른 시간대로 표시하려면 aware 값에 astimezone()을 적용하세요. 기본 datetime.fromtimestamp()가 반환하는 naive 값에는 시간대가 지정되어 있지 않으므로, UTC로 해석하는 것이 의도였음을 알고 있지 않다면 UTC 값으로 취급하지 마세요.
일부 API는 초가 아니라 밀리초를 반환합니다. 밀리초 타임스탬프는 보통 현재 시점의 초 단위 타임스탬프보다 훨씬 큰 값입니다. 초를 받는 변환 API에 전달하기 전에 1000으로 나누세요. 1초보다 작은 정밀도가 중요하다면 소수 부분을 보존하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from datetime import datetime, timezone
timestamp_ms = 1606262400123
timestamp_seconds = timestamp_ms / 1000
utc_datetime = datetime.fromtimestamp(timestamp_seconds, timezone.utc)
print(utc_datetime)
최종 값에는 입력이 나타내는 소수 초가 포함됩니다. 현지 시간으로 표시하려면 utc_datetime.astimezone()을 호출하세요. 결과 시각은 호스트에 설정된 시간대에 따라 달라집니다. 표시 형식과 관계없이 시점을 보존해야 한다면 원래 숫자 타임스탬프를 유지하세요.