Python time 및 datetime 모듈 활용 가이드

Python에서 시간을 다루는 세 가지 주요 방식은 다음과 같습니다. 타임스탬프, struct_time 튜플, 그리고 형식화된 시간 문자열입니다.

  1. 타임스탬프(Timestamp): 1970년 1월 1일 00:00:00 UTC부터 경과된 시간을 초 단위로 나타냅니다. time.time() 함수는 float 타입의 타임스탬프를 반환합니다.
  2. 형식화된 시간 문자열(Format String): 사람이 읽기 쉬운 날짜 및 시간 표현 방식입니다. 예: '2023-10-27'.
  3. 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}")

태그: python time datetime 날짜 시간

6월 27일 19:30에 게시됨