파이썬 Time [ UNIX Time, Epoch Time, timestamp ]
- 2019. 9. 3. 16:12
리눅스나 유닉스를 다뤄본 경험이 있으신 분들은 한 번쯤은 UNIX Time이나 Epoch Time을 들어본 적이 있으실 겁니다.
파이썬 Time
UNIX 타임이란?
< UNIX 타임이란? >
유닉스 타임은 일자와 시간을 표현하는 방법으로 POSIX 타임, Epoch 타임이라고 불리기도 합니다. 년, 월, 일, 시, 분, 초를 나타내는데 가장 효율적인 방법으로 협정 세계시(UTC) 기준일 1970년 1월 1일 00:00:00을 기준으로 몇 초가 지났는지를 나타냅니다. 초단위로 표현하기 때문에 32비트 플랫폼에서 2,147,483,647초 까지 처리할 수 있습니다. 이를 한국 시간으로 계산해 보면 2038년 1월 19일 화요일 오후 12시 14분 07초가 됩니다. 즉, 이후 시간은 오버플로우가 발생하며 32비트 플랫폼 서버를 2038년까지 사용하게 된다면 1999년 말에 세계를 떠들썩하게 했던 밀레니엄 버그(Y2K)처럼 2038년에 또 한 번 세계가 떠들썩해질 것입니다. 물론 그때에는 이미 노후 장비인 32비트 장비가 거의 모두 64비트 체제로 전환되었을 것입니다.
파이썬 Epoch Time
import datetime, time
print(datetime.datetime.today())
print(time.time())
#결과
#2019-09-03 14:24:19.428691
#1567488259.4286914
파이썬에서 time 라이브러리에 정의되어 있는 time함수를 호출만 하면 간단히 Epoch Time (UNIX Time)을 구할 수 있습니다. 소수점 값은 밀리초입니다.
위의 time.time()으로 얻은 결과 값이 과연 Epoch Time이 맞는지 확인해 보겠습니다. 소수점까지 모두 입력해도 동일한 결과 값을 확인할 수 있습니다.

확인 결과 datetime.datetime.today() 실행으로 얻어진 년, 월, 일, 시, 분, 초와 일치하는 것을 확인할 수 있습니다. 물론 Epoch Time을 파이썬 내에서도 변환이 가능하지만 이런 사이트도 있다는 것을 알려드리기 위해 한번 확인해봤습니다.
파이썬 Time 변환 ( Epoch Time to datetime )
import datetime, time
get_today = datetime.datetime.today()
get_epoch_tm = time.time()
print(get_today)
print(get_epoch_tm)
print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(get_epoch_tm)))
print(str(int(get_epoch_tm)))
print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(get_epoch_tm))))
print("-"*20)
print(time.strftime("%Y/%m/%d %H:%M:%S", time.gmtime(get_epoch_tm)))
print(time.timezone)
print(time.strftime("%Y/%m/%d %H:%M:%S", time.gmtime(get_epoch_tm - time.timezone)))
#결과
#2019-09-03 14:56:51.163627
#1567490211.1667118
#2019/09/03 14:56:51
#1567490211
#2019/09/03 14:56:51
#--------------------
#2019/09/03 05:56:51
#-32400
#2019/09/03 14:56:51
파이썬에서 time.time()으로 구한 Epoch Time을 strftime함수를 사용하여 우리가 읽기 쉬운 datetime 형태로 변환하였습니다. 참고로 localtime으로 Epoch Time을 받게 되면 현재 시스템의 시각정보를 바탕으로 datetime이 변환됩니다.
만약 gmtime을 사용하여 Epoch Time을 변환하게 된다면 GMT시간으로 변경되기 때문에 한국 시간과는 다소 차이가 발생하게 됩니다. 한국시간과의 차이는 time.timezone의 값처럼 32400초 차이가 발생하며 이 값을 적용해 주어야 한국시간을 구할 수 있습니다.
파이썬 Time 변환 ( datetime to Epoch Time )
import datetime, time
mk_dt = datetime.datetime(2019, 9, 1, 13, 1,30, 711811)
curr_dt = datetime.datetime.today()
ts_mk_dt = mk_dt.timestamp()
ts_curr_dt = curr_dt.timestamp()
print(mk_dt)
print(curr_dt)
print("-"*20)
print(ts_mk_dt)
print(ts_curr_dt)
print("-"*20)
print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(ts_mk_dt)))
print(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(ts_curr_dt)))
#결과
#2019-09-01 13:01:30.711811
#2019-09-03 15:55:02.622248
#--------------------
#1567310490.711811
#1567493702.622248
#--------------------
#2019/09/01 13:01:30
#2019/09/03 15:55:02
특정 일자나 today()로 얻은 datetime.datetime 클래스 타입의 결과 값에 timestamp() 함수만 호출해 주면 해당 년, 월, 일, 시, 분, 초에 해당하는 Epoch Time을 구할 수 있습니다.