Python에서 시간을 다루는 세 가지 주요 방식은 다음과 같습니다. 타임스탬프, struct_time 튜플, 그리고 형식화된 시간 문자열입니다.
- 타임스탬프(Timestamp): 1970년 1월 1일 00:00:00 UTC부터 경과된 시간을 초 단위로 나타냅니다.
time.time()함수는 float 타입의 타임스탬프를 반환합니다. - 형식화된 시간 문자열(Format String): 사람이 읽기 쉬운 날짜 및 시간 표현 방식입니다. 예: '2023-10-27'.
struct_time튜플: 시간을 구성하는 9개의 요소를 포함하는 튜플입니다.인덱스 속성 값 범위 0 tm_year(년)예: 2023 1 tm_mon(월)1 - 12 2 tm_mday(일)1 - 31 3 tm_hour(시)0 - 23 4 tm_min(분)0 - 59 5 tm_sec(초)0 - 60 6 tm_wday(요일)0 - 6 (0은 월요일) 7 tm_yday(연중 일자)1 - 366 8 tm_isdst(일광 절약 시간제)0 (기본값)
time 모듈
time 모듈은 프로그램 실행을 일시 중지하거나 현재 시간을 가져오는 데 자주 사용됩니다. time.sleep() 및 time.time()이 대표적인 예입니다.
import time
time.sleep(1) # 프로그램 실행을 1초 동안 일시 중지
current_timestamp = time.time() # 현재 시간 타임스탬프 얻기
print(f"Current timestamp: {current_timestamp}")
시간 형식 변환
형식화된 시간 문자열 얻기
time.strftime() 함수를 사용하여 다양한 형식의 시간 문자열을 생성할 수 있습니다.
import time
# 현재 시간을 'YYYY-MM-DD HH:MM:SS' 형식으로 포맷
formatted_time_1 = time.strftime("%Y-%m-%d %X")
print(f"Formatted time 1: {formatted_time_1}")
# 현재 시간을 'YYYY-MM-DD HH:MM:SS' 형식으로 명시적으로 포맷
formatted_time_2 = time.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formatted time 2: {formatted_time_2}")
# 사용 가능한 주요 형식 코드:
# %Y: 년 (4자리)
# %m: 월 (01-12)
# %d: 일 (01-31)
# %H: 시 (24시간제, 00-23)
# %M: 분 (00-59)
# %S: 초 (00-60)
# %X: 시간 (로케일에 따른 시간 표현, 예: 16:30:55)
struct_time 객체 얻기
time.localtime() 함수는 현재 시스템의 지역 시간대를 기준으로 struct_time 객체를 반환합니다.
import time
local_time_struct = time.localtime()
print(f"Local struct_time: {local_time_struct}")
# 출력 예시:
# Local struct_time: time.struct_time(tm_year=2023, tm_mon=10, tm_mday=27, tm_hour=10, tm_min=30, tm_sec=55, tm_wday=4, tm_yday=300, tm_isdst=0)
타임스탬프는 컴퓨터가 인식하기 좋은 형식이며, 시간 문자열은 사람이 읽기 쉬운 형식입니다. struct_time은 이러한 두 형식 간의 변환을 용이하게 하고 프로그램에서 시간을 조작하는 데 유용합니다.
세 가지 시간 형식 간의 변환
타임스탬프 <-> struct_time
import time
timestamp_example = 1678886400 # 예시 타임스탬프 (2023-03-15 12:00:00 UTC)
# 타임스탬프 -> UTC struct_time
utc_struct = time.gmtime(timestamp_example)
print(f"UTC struct_time: {utc_struct}")
# 타임스탬프 -> 지역 struct_time
local_struct = time.localtime(timestamp_example)
print(f"Local struct_time: {local_struct}")
# 지역 struct_time -> 타임스탬프
# time.mktime()은 지역 시간을 기준으로 타임스탬프를 계산합니다.
timestamp_from_local = time.mktime(local_struct)
print(f"Timestamp from local struct_time: {timestamp_from_local}")
struct_time <-> 형식화된 시간 문자열
import time
# struct_time -> 시간 문자열
current_struct = time.localtime()
formatted_string_from_struct = time.strftime("%Y/%m/%d %H:%M", current_struct)
print(f"Formatted string from struct_time: {formatted_string_from_struct}")
# 특정 타임스탬프를 struct_time으로 변환 후 문자열로 포맷
specific_timestamp = 1555000000 # 예시 타임스탬프
specific_struct = time.localtime(specific_timestamp)
formatted_specific = time.strftime("%Y-%m-%d", specific_struct)
print(f"Formatted specific timestamp: {formatted_specific}")
# 시간 문자열 -> struct_time
time_string = '2023-10-27 11:00:00'
format_code = '%Y-%m-%d %H:%M:%S'
parsed_struct = time.strptime(time_string, format_code)
print(f"Parsed struct_time: {parsed_struct}")
# 출력 예시:
# Parsed struct_time: time.struct_time(tm_year=2023, tm_mon=10, tm_mday=27, tm_hour=11, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=300, tm_isdst=-1)
datetime 모듈
datetime 모듈은 time 모듈보다 더 객체 지향적이며, 날짜와 시간을 함께 다루기 편리합니다. datetime 객체는 연, 월, 일, 시, 분, 초, 마이크로초 정보를 포함합니다.
datetime 객체 생성 및 사용
현재 날짜 및 시간 얻기
from datetime import datetime
# 현재 로컬 시간
now_local = datetime.now()
print(f"Current local datetime: {now_local}")
# 현재 UTC 시간
now_utc = datetime.utcnow()
print(f"Current UTC datetime: {now_utc}")
특정 날짜 및 시간으로 datetime 객체 생성
from datetime import datetime
# 특정 날짜와 시간으로 datetime 객체 생성 (예: 2008년 베이징 올림픽 개막일)
olympics_start = datetime(2008, 8, 8, 20, 0)
print(f"Beijing Olympics start: {olympics_start}")
문자열을 datetime 객체로 변환
time.strptime()과 유사하게 datetime.strptime()을 사용합니다.
from datetime import datetime
event_string = '2024-01-15 09:30:00'
event_format = '%Y-%m-%d %H:%M:%S'
event_datetime = datetime.strptime(event_string, event_format)
print(f"Event datetime from string: {event_datetime}")
datetime 객체를 문자열로 변환
datetime.strftime() 메서드를 사용하여 datetime 객체를 원하는 형식의 문자열로 변환합니다.
from datetime import datetime
current_dt = datetime.now()
# 한국어 로케일 설정이 필요할 수 있으며, %A는 요일을 의미합니다.
# 로케일 설정 없이 %A는 영어 요일을 반환할 수 있습니다.
formatted_korean = current_dt.strftime('%Y년 %m월 %d일 %A, %H시 %M분 %S초')
print(f"Formatted Korean datetime: {formatted_korean}")
datetime 객체를 이용한 시간 계산
datetime.timedelta 객체를 사용하여 날짜 및 시간 간의 차이를 계산하거나 특정 간격만큼 시간을 더하고 뺄 수 있습니다.
import datetime
# 현재 시간
current_time = datetime.datetime.now()
# 30분 후의 시간 간격 (timedelta)
time_interval = datetime.timedelta(minutes=30)
# 30분 후의 시간 계산
future_time = current_time + time_interval
print(f"Current time: {current_time}")
print(f"Time after 30 minutes: {future_time}")
# 2일 전의 시간 계산
past_interval = datetime.timedelta(days=2)
past_time = current_time - past_interval
print(f"Time 2 days ago: {past_time}")