파이썬의 time 모듈로 시간 데이터 다루기
간단한 시간 데이터를 처리하기 위해서 사용되는 파이썬의 내장 모듈인 time
에 대해서 알아보도록 하겠습니다.
Epoch Time
파이썬의 time
내장 모듈은 주로 epoch time(Unix time, POSIX time)을 다룰 때 사용합니다.
epoch time은 UTC(GMT+0) 기준으로 1970년 1월 1일 0시 0분 0초부터의 경과 시간을 나타내는데 흔히 timestamp라고 불리기도 합니다.
인간이 사용하는 사용하는 날짜와 시간에는 시간대(time zone), 일광절약타임(date light saving), 윤년/윤달, 양력/음력 등 여러 가지 복잡한 개념들이 많이 들어가 있습니다. 따라서 전산 시스템에서는 이렇게 복잡한 날짜와 시간을 모델링하는 대신에, epoch time을 이용해서 시간을 단순하게 숫자로 저장하고 처리하는 경우가 많습니다.
struct_time 객체
컴퓨터 친화적인 Unix timestamp 값은 인간에게는 직관적이지 않습니다.
예를 들어, timestamp 1575142526.500323
를 보고, 무슨 날짜와 시간을 나타내는지를 바로 알아차릴 수 있는 사람은 많지 않을 것입니다.
따라서, time
모듈은 timestamp가 주어졌을 때, 날짜와 시간을 알아내기 위한 API를 제공하는데요.
이를 위해 time
모듈은 내부적으로 날짜와 시간을 표현하기 위해서 9개의 속성를 갖는 struct_time
객체를 사용합니다.
이름 | 값 | 비고 |
---|---|---|
tm_year | 연 | 예: 1993, 2019 |
tm_mon | 달 | 범위: 1~12 |
tm_mday | 일 | 범위: 1~31 |
tm_hour | 시 | 범위: 0~23 |
tm_min | 분 | 범위: 0~59 |
tm_sec | 초 | 범위: 0~61 |
tm_wday | 요일 | 범위: 0~6 (0: 월요일) |
tm_yday | 연중 경과일 | 범위: 1~366 |
tm_isdst | 일광절약타임 적용여부 | 0: 미적용 1: 적용 -1: 모름 |
time() 함수: 현재 timestamp 얻기
time
모듈의 time()
함수는 현재 Unix timestamp을 소수로 리턴하는데요. 정수부는 초단위이고, 소수부는 마이크로(micro) 초단위 입니다.
from time import time
time()
- 출력 결과
1575142526.500323
타임 머신을 타고 과거로 가지 않는 이상 매번 호출할 때 마다 더 큰 수가 리턴이 되겠죠?
gmtime(), localtime() 함수: timestamp를 struct_time 객체로 변환
gmtime()
함수는 주어진 timestamp 값을 GMT 기준의 struct_time
타입 데이터로 변환해줍니다.
from time import gmtime
gmtime(1575142526.500323)
- 출력 결과
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=30, tm_hour=19, tm_min=35, tm_sec=26, tm_wday=5, tm_yday=334, tm_isdst=0)
localtime()
함수는 주어진 timestamp 값을 현지 시간대 기준의 struct_time
타입 데이터로 변환해줍니다.
from time import localtime
tm = localtime(1649637016.7605205)
print("year:", tm.tm_year)
print("month:", tm.tm_mon)
print("day:", tm.tm_mday)
print("hour:", tm.tm_hour)
print("minute:", tm.tm_min)
print("second:", tm.tm_sec)
- 출력 결과
year: 2019
month: 11
day: 30
hour: 14
minute: 35
second: 26
저는 현재 북미의 동부 표준 시간대(EST, GMT-5)에서 이 포스팅를 작성하고 있기 때문에, 위의 GMT 기준 19시보다 5시간 느린 14시로 변환된 것을 알 수 있습니다.
참고로 gmtime()
와 localtime()
함수 모두 timestamp를 넘기지 않고 호출하면, 현재 시간에 대한 struct_time
객체를 반환합니다.
time.gmtime() # gmtime(time()) 와 동일
time.localtime() # localtime(time()) 와 동일
ctime() 함수: timestamp를 문자열로 변환
ctime()
함수는 주어진 timestamp를 현지 시간대 기준으로 소위 미국에서 흔히 사용되는 요 월 일 시:분:초 년
포맷으로 변환해줍니다.
그냥 간단하게 timestamp가 나타내는 날짜와 시간을 확인해보는 용도로 쓰기에 좋습니다.
from time import ctime
ctime(1575142526.500323)
- 출력 결과
Sat Nov 30 14:35:26 2019
strftime() 함수: struct_time 객체를 특정 포맷의 문자열로 변환
strftime()
함수는 ctime()
함수처럼 정해진 포맷인 아닌 다양한 포맷의 문자열 변환이 가능하게 해줍니다.
첫번째 인자로 포맷을 넘겨야 하는데, 포맷 규칙은 파이썬 공식 레퍼러스를 참고 바랍니다.
두번째 인자로는 timestamp가 아닌 struct_time
객체를 받으므로 주의해야 합니다.
위에서 다룬 gmttime()
이나 localtime()
같은 함수를 사용해서 struct_time
객체를 확보 후에 strftime()
함수의 두번째 인자로 넘기면 됩니다.
strftime()
함수를 이용해서 한국에서 자주 쓰이는 날짜/시간 포맷의 문자열로 변환을 해보겠습니다.
from time import strftime
tm = localtime(1575142526.500323)
strftime('%Y-%m-%d %I:%M:%S %p', tm)
- 출력 결과
2019-11-30 02:35:26 PM
strptime() 함수: 특정 포맷의 문자열을 struct_time 객체로 변환
strptime()
함수는 strftime()
함수와 정반대로 특정 포맷의 문자열을 struct_time
객체로 변환을 해줍니다.
첫번째 인자로 문자열을 받고, 두번째 인자로 날짜/시간 포맷을 받습니다.
from time import strptime
string = '2019-11-30 02:35:26 PM'
strptime(string, '%Y-%m-%d %I:%M:%S %p')
- 출력 결과
time.struct_time(tm_year=2019, tm_mon=11, tm_mday=30, tm_hour=14, tm_min=35, tm_sec=26, tm_wday=5, tm_yday=334, tm_isdst=-1)
sleep() 함수: 일정 시간동안 실행 지연 시키기
sleep()
함수는 프로그램의 실행을 일정 시간동안 지연시키고 싶을 때 사용됩니다.
지연시키고 싶은 시간을 초단위로 넘기면, 그 시간동안 프로그램의 실행이 멈췄다가 다시 실행됩니다.
from time import sleep
print('before')
sleep(3.5)
print('after')
[응용] 프로그램 수행 시간 측정
time
내장 모듈을 사용하면 간단하게 프로그램의 특정 구간의 수행 시간을 측정해볼 수 있습니다.
from time import time, sleep
start = time()
sleep(1.5)
end = time()
print('time elapsed:', end - start)
- 출력 결과
time elapsed: 1.5007548332214355
전체 코드
본 포스팅에서 제가 작성한 전체 코드는 아래에서 직접 확인하고 실행해보실 수 있습니다.
마치면서
이상으로 파이썬의 time
모듈을 사용해서 간단한 시간 데이터를 다루는 방법에 대해서 살펴보았습니다.
time
내장 모듈에 대한 좀 더 자세한 내용은 아래 파이썬 공식 레퍼런스를 참고 바랍니다.
파이썬은 좀 더 복잡한 날짜와 시간 처리를 위해서 datetime
내장 모듈도 지원하고 있습니다.
이 부분에 대해서는 별도로 포스팅을 하였으니 아래 관련 포스팅를 참고 바랍니다.