파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
시계열 데이터 분석을 위해서는 시간을 지정해줘야 할 경우가 종종 생깁니다. 이번 포스팅에서는 파이썬 프로그래밍에서 주로 사용되는 Epoch time, timestamp 등이 무엇을 의미하는지, 이를 위해 필요한 파이썬 패키지 datetime에 대해 알아보겠습니다. timestamp, UTC, 그리고 한국 표준시로 나타내는 방법을 확인해 보시기 바랍니다.
글의 순서
복잡한 시간을 단순하게 표시해주는 Epoch Time (=timestamp)
현재시간을 Epoch time으로 바꾸는 파이썬 프로그래밍
Epoch time을 UTC로 바꿔주는 파이썬 time 모듈
UTC를 KST로 바꿔주는 파이썬 코드
파이썬 time 실습코드 : UTC → timestamp → UTC → KST
Epoch Time (=timestamp), 복잡한 시간을 단순하게 표시해주는 방법
컴퓨터에서 복잡한 날짜와 시간을 단순하게 표현하기 위해서 epoch time을 이용합니다. epoch time은 UTC(GMT+0) 기준으로 1970년 1월 1일 0시 0분 0초부터의 경과 시간을 나타냅니다. 우리가 쓰는 날짜와 시간은 세계 각지의 시간대(time zone), 일광절약시간, 음력, 윤달 등을 구분해줘야 하는데, epoch time을 쓰면 간편하게 표현할 수 있습니다.
여기서, epoch와 UTC가 궁금하실텐데요. epoch는 중요한 사건이 발생한 시점부터의 기간을 의미하며, UTC(Universal Time Coordinated)는 국제 표준시를 의미합니다. UTC는 1972년 1월 1일부터 시행되었는데, 1970년 1월 1일 자정이 0밀리초이며, 그때부터 시간이 누적되고 있습니다. 참고로 한국 표준시(KST)는 UTC 보다 9시간이 빠르며, UTC+09:00로 표시합니다.
Unix time, POSIX time이라고 쓰여 있으면, 이는 epoch time을 의미하며, epoch time을 timestamp로 부르기도 합니다. 그러니까 epoch time, timestamp, Unix time, POSIX time은 모두 같은 의미입니다.
현재시간을 Epoch time으로 바꾸는 파이썬 프로그래밍
epoch time은 1970년 1월 1일 0시 0분 0초부터의 경과 시간을 나타내고, epoch time, timestamp, Unix time, POSIX time이 모두 같은 의미라고 말씀드렸습니다.
현재 시간을 epoch time으로 바꾸려면, 먼저 현재시간을 가져와야 합니다. 아래의 ‘파이썬 time 실습코드’ #01) 부분에서 현재시간을 국제표준시(UTC)로 가져오고 있습니다.
파이썬 time 실습코드 #02) 부분은 현재 시간을 epoch time으로 나타내주는 부분입니다. 현재 시간을 timestamp로 나타내기 위해 파이썬 패키지 중 datetime을 사용하였습니다. timestamp로 표시된 현재시간은 1673665834.613139로 소숫점이하 6자리까지를 보여주고 있습니다. 그러니까 마이크로 초(micro second)까지 나타내줍니다.
from datetime import datetime, timezone, timedelta
#01) 파이썬 'datetime' 패키지를 이용해서 현재시간 얻기 : datetime.now() 함수 이용
now_utc = datetime.now(timezone.utc)
print('#01) Now UTC ==> ', now_utc)
#02) UTC를 KST로 변환 : timedelta() 함수이용
now_kst = now_utc + timedelta(hours=9)
print('#02) Now KST ==> ', now_kst)
#03) KST 문자열 출력
print('#03) Now KST ==> ',now_kst.strftime('%Y-%m-%d %H:%M:%S'))
#04) 현재시간(now_utc)을 timestamp로 변환 : timestamp() 함수 이용
timestamp = now_utc.timestamp()
print('#04) timestamp (micro sec) : ', timestamp)
print('#04) timestamp ( sec) : ', int(timestamp))
#05) timestamp를 다시 UTC로 변환 : datetime.fromtimestatm() 함수 이용
now_kst_from_timestamp = datetime.fromtimestamp(int(timestamp))
print('#05) KST fromtimestamp', now_kst_from_timestamp)
now_utc_from_timestamp = datetime.fromtimestamp(timestamp, tz=timezone.utc)
print('#05) UTC fromtimestamp', now_utc_from_timestamp)
now_utc_from_timestamp = datetime.fromtimestamp(int(timestamp)) - timedelta(hours=9)
print('#05) UTC fromtimestamp', now_utc_from_timestamp)
#01) Now UTC ==> 2024-04-06 02:33:21.564266+00:00 #02) Now KST ==> 2024-04-06 11:33:21.564266+00:00 #03) Now KST ==> 2024-04-06 11:33:21 #04) timestamp (micro sec) : 1712370801.564266 #04) timestamp ( sec) : 1712370801 #05) KST fromtimestamp 2024-04-06 11:33:21 #05) UTC fromtimestamp 2024-04-06 02:33:21.564266+00:00 #05) UTC fromtimestamp 2024-04-06 02:33:21