소개
Python의 time 모듈은 실제 세계의 시간을 가져오고 이와 관련된 다양한 작업을 수행하는 데 사용됩니다. 심지어 스크립트의 실행 시간을 제어하는 것도 가능합니다. 이 글에서는 time 모듈의 핵심 기능들을 예제와 함께 살펴보겠습니다.
시작하기
time 모듈은 Python에 기본으로 포함되어 있어 별도로 PIP 패키지 관리자를 통해 설치할 필요가 없습니다. 표준 라이브러리이기 때문에 언제든 바로 사용할 수 있습니다.
다양한 함수와 메서드를 사용하려면 먼저 모듈을 임포트해야 합니다.
import time
현재 지역 시간 출력하기
현재 지역 시간을 출력하려면 ctime() 함수를 사용합니다.
먼저 에포크(epoch) 이후 경과된 초 단위 시간을 구해야 합니다. 여기서 에포크란 1970년 1월 1일 00:00:00(UTC)을 의미하며, 컴퓨터 시스템이 시간을 계산하는 기준점입니다.
import time
seconds = time.time()
local_time = time.ctime(seconds)
print("Local time:", local_time)
실행 결과
Local time: Sun Jan 31 23:50:16 2021
위 프로그램에서는 먼저 time.time()으로 에포크 이후 경과 시간을 초 단위로 구한 뒤, 그 값을 ctime() 함수의 인자로 전달하여 사람이 읽기 쉬운 형태의 현재 지역 시간을 반환받습니다.
Python 스크립트 실행 지연시키기
때로는 Python 스크립트의 실행 속도를 늦추거나 지연시켜야 할 때가 있습니다. 예를 들어 for 반복문을 순회하면서 숫자를 천천히 출력하고 싶은 경우가 대표적입니다.
이럴 때 time 모듈의 sleep() 함수를 활용할 수 있습니다.
예제
import time
for i in range(1, 6):
print(i)
time.sleep(1)
위 프로그램은 1부터 5까지 출력하며, 각 숫자를 출력한 후 다음 숫자를 출력하기 전에 1초씩 대기합니다.
이 방식을 활용하면 전체 내용이 한꺼번에 화면에 출력되는 것을 방지하고, 실행 흐름에 여유를 줄 수 있습니다. 게임 개발이나 API 요청 간격 조절 등에도 유용하게 쓰입니다.
time.struct_time 객체로 지역 시간 출력하기
time 모듈을 다루다 보면 struct_time 객체를 자주 접하게 됩니다. 이 객체는 연도, 월, 일, 시, 분, 초 등 시간 정보를 구조화된 형태로 담고 있습니다.
struct_time 객체는 아래와 같은 구조로 구성됩니다.
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=31,
tm_hour=9, tm_min=28, tm_sec=56,
tm_wday=6, tm_yday=31, tm_isdst=0)
- tm_wday: 요일 (0 = 월요일, 6 = 일요일)
- tm_yday: 해당 연도의 몇 번째 날인지 (1~366)
- tm_isdst: 서머타임 적용 여부
struct_time 객체가 무엇인지 알았으니, 이제 실제로 지역 시간을 출력해 보겠습니다.
예제
import time
seconds = time.time()
curr_time = time.localtime(seconds)
print(curr_time)
print("Current year -> ", curr_time.tm_year)
위 예제에서는 localtime()으로 struct_time 객체를 얻은 후, 그 속성들에 접근하여 값을 확인했습니다. 위에서 소개한 struct_time 문법을 참고하면 연도 외에도 월, 일, 시간 등 다양한 속성에 자유롭게 접근할 수 있습니다.
문자열 데이터를 struct_time으로 변환하기
때로는 문자열 형태의 시간 데이터를 struct_time 객체로 변환해야 할 필요가 있습니다. 이 경우 strptime() 함수를 사용하며, 문자열의 형식에 맞는 포맷 코드를 함께 지정해 주어야 합니다.
예제
import time
example = "17 July 2001"
ans = time.strptime(example, "%d %B %Y")
print(ans)
실행 결과
time.struct_time(tm_year=2001, tm_mon=7, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=198, tm_isdst=-1)
위 예제에서 "%d %B %Y"는 각각 일(day), 월 이름(전체 영문), 연도를 의미하는 포맷 코드입니다. 입력 문자열과 포맷 코드가 일치하지 않으면 ValueError가 발생하므로 주의해야 합니다.
마무리
이제 Python의 time 모듈이 제공하는 다양한 기능과 활용법을 이해하게 되었습니다.
이번 글에서 배운 내용을 정리하면 다음과 같습니다.
time()으로 에포크 이후 경과 시간(초) 구하기ctime()으로 읽기 쉬운 형태의 지역 시간 출력하기sleep()으로 스크립트 실행 지연시키기localtime()으로 struct_time 객체 생성 및 속성 접근하기strptime()으로 문자열을 struct_time 객체로 변환하기
time 모듈의 더 많은 기능이 궁금하다면 공식 문서(https://docs.python.org/3/library/time.html)를 참고해 보시기 바랍니다.