Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 time 모듈 완벽 정리: 주요 시간 함수와 활용법

파이썬은 time 모듈을 통해 시간 정보를 읽고, 표현하고, 다루는 다양한 기능을 제공합니다. 파이썬에서 날짜(date), 시간(time), 날짜시간(datetime)은 모두 객체로 존재하기 때문에, 이들에 대한 어떤 연산이든 문자열이나 타임스탬프가 아닌 객체를 조작하는 방식으로 이루어집니다.

이 글에서는 시간 관련 다양한 작업을 처리할 수 있게 해주는 time 모듈의 핵심 기능들을 살펴보겠습니다.

에포크(EPOCH)란?

time 모듈은 시간의 시작점을 의미하는 에포크(EPOCH) 규약을 따릅니다. 유닉스 계열 시스템에서 에포크는 1970년 1월 1일 자정(12:00 am)부터 시작되며, 일반적으로 2038년까지 표현할 수 있습니다.

자신의 시스템에서 에포크 값을 확인하려면 아래 코드를 실행해 보세요.

>>> import time
>>> time.gmtime(0)

실행 결과

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0,
tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

틱(Tick)이란?

틱(tick)은 초 단위로 측정된 부동소수점 숫자 형태의 시간 간격을 의미합니다. 때때로 시간은 서머타임(DST, 일광절약시간) 형태로 제공되기도 하는데, 이 경우 여름에는 시계가 1시간 앞당겨지고 가을에는 다시 원래대로 돌아갑니다.

파이썬 time 모듈의 주요 함수

1. time.time()

time() 함수는 time 모듈의 핵심 함수로, 에포크 이후 경과한 초 수를 부동소수점 값으로 반환합니다.

import time
print("에포크 이후 경과한 초 : ", time.time())

실행 결과

에포크 이후 경과한 초 : 1553262407.0398576

time() 함수를 활용하면 두 지점 사이의 실제 벽시계 시간(wall-clock time) 경과를 계산할 수 있습니다.

import time
start = time.time()
print("작업 진행 중...")
time.sleep(0.9)
end = time.time()
print("소요 시간: ", end - start)

실행 결과

작업 진행 중...
소요 시간: 0.9219651222229004

2. time.clock()

time.clock() 함수는 프로세서(CPU) 시간을 반환하며, 성능 테스트나 벤치마킹에 사용됩니다. 프로그램이 실제로 사용한 시간을 더 정확하게 측정할 수 있다는 장점이 있습니다.

참고: time.clock()은 Python 3.3부터 지원 중단(deprecated)되었으며, Python 3.8에서 완전히 제거되었습니다. 최신 버전에서는 time.perf_counter() 또는 time.process_time()을 사용하는 것이 좋습니다.

두 함수의 차이를 비교하는 예제입니다.

import time
template = 'time()# {:0.2f}, clock()# {:0.2f}'
print(template.format(time.time(), time.clock()))
for i in range(5, 0, -1):
print('---Sleeping for: ', i, 'sec.')
time.sleep(i)
print(template.format(time.time(), time.clock()))

실행 결과

time()# 1553263728.08, clock()# 0.00
---Sleeping for: 5 sec.
time()# 1553263733.14, clock()# 5.06
---Sleeping for: 4 sec.
time()# 1553263737.25, clock()# 9.17
---Sleeping for: 3 sec.
time()# 1553263740.30, clock()# 12.22
---Sleeping for: 2 sec.
time()# 1553263742.36, clock()# 14.28
---Sleeping for: 1 sec.
time()# 1553263743.42, clock()# 15.34

3. time.ctime()

ctime() 함수는 "에포크 이후 경과한 초"를 입력받아 이를 사람이 읽기 쉬운 문자열(현지 시간 기준)로 변환합니다. 인자를 전달하지 않으면 현재 시간을 반환합니다.

import time
print('현재 현지 시간 :', time.ctime())
newtime = time.time() + 60
print('60초 후의 시간 :', time.ctime(newtime))

실행 결과

현재 현지 시간 : Fri Mar 22 19:43:11 2019
60초 후의 시간 : Fri Mar 22 19:44:11 2019

4. time.sleep()

sleep() 함수는 지정한 초 동안 현재 스레드의 실행을 일시 중단합니다. 부동소수점 값을 입력하면 더 정밀한 대기 시간을 설정할 수 있습니다.

파일 닫기가 완료되기를 기다리거나, 데이터베이스 커밋이 끝나기를 대기해야 하는 상황 등에서 유용하게 사용됩니다.

import time
# ctime()으로 현재 시간 출력
print ("시작 시간 : ", end="")
print (time.ctime())
# sleep()으로 실행 일시 중단
print ('5초 대기 중...')
time.sleep(5)
# ctime()으로 종료 시간 출력
print ("종료 시간 : ", end="")
print (time.ctime())

실행 결과

시작 시간 : Fri Mar 22 20:00:00 2019
5초 대기 중...
종료 시간 : Fri Mar 22 20:00:05 2019

5. time.struct_time 클래스

struct_time은 time 모듈에 존재하는 유일한 데이터 구조로, 네임드 튜플(named tuple) 인터페이스를 가지며 인덱스 또는 속성 이름으로 접근할 수 있습니다.

날짜의 특정 필드(연, 월, 일, 요일 등)에 접근해야 할 때 특히 유용합니다. localtime(), gmtime() 같은 함수들이 struct_time 객체를 반환합니다.

import time
print('현재 현지 시간:', time.ctime())
t = time.localtime()
print('일(day of month):', t.tm_mday)
print('요일(day of week):', t.tm_wday)
print('연중 몇 번째 날(day of year):', t.tm_yday)

실행 결과

현재 현지 시간: Fri Mar 22 20:10:25 2019
일(day of month): 22
요일(day of week): 4
연중 몇 번째 날(day of year): 81

6. time.strftime()

strftime() 함수는 두 번째 인자로 받은 튜플 또는 struct_time 객체를, 첫 번째 인자로 지정한 포맷 문자열에 맞춰 변환합니다.

import time
now = time.localtime(time.time())
print("현재 날짜 및 시간: ", time.asctime(now))
print(time.strftime("%y/%m/%d %H:%M", now))
print(time.strftime("%a %b %d", now))
print(time.strftime("%c", now))
print(time.strftime("%I %p", now))
print(time.strftime("%Y-%m-%d %H:%M:%S %Z", now))

실행 결과

현재 날짜 및 시간: Fri Mar 22 20:13:43 2019
19/03/22 20:13
Fri Mar 22
Fri Mar 22 20:13:43 2019
08 PM
2019-03-22 20:13:43 India Standard Time

파이썬에서 시간대(Timezone) 확인하기

시간대 정보를 제공하는 두 가지 속성이 있습니다.

1. time.timezone

DST가 적용되지 않은 현지 시간대의 UTC 오프셋을 초 단위로 반환합니다.

>>> time.timezone
-19800

2. time.tzname

DST 미적용 시간대와 DST 적용 시간대의 이름을 담은 튜플을 반환합니다.

>>> time.tzname
('India Standard Time', 'India Daylight Time')

마무리

파이썬의 time 모듈은 에포크 기반 초 계산부터 사람이 읽기 쉬운 시간 문자열 변환, 스레드 대기, 시간대 확인까지 폭넓은 시간 처리 기능을 제공합니다. 용도에 따라 적절한 함수를 선택하면 시간 관련 로직을 효율적으로 구현할 수 있습니다.