안녕하세요! 지난 시간에는 파이썬에서 파일 시스템과 상호작용하는 데 필수적인 os 모듈과 pathlib 모듈에 대해 알아보았습니다. 이제 파일과 디렉토리를 효율적으로 관리하고 조작할 수 있게 되었을 거예요!
이번 시간에는 파이썬에서 날짜와 시간을 다루는 데 필수적인 datetime 모듈에 대해 알아보겠습니다. 프로그램 개발 시 현재 시간 기록, 특정 날짜 계산, 시간 간격 측정 등 날짜와 시간 관련 작업은 매우 흔하게 발생합니다.
datetime 모듈은 날짜, 시간, 그리고 날짜와 시간을 모두 포함하는 객체를 제공하여 이러한 작업을 쉽고 정확하게 처리할 수 있도록 돕습니다. 마치 시간 여행을 위한 정교한 도구 상자를 배우는 것과 같다고 생각하시면 됩니다.
Part 1: datetime 모듈의 주요 클래스
datetime 모듈은 주로 다음과 같은 클래스들을 제공합니다.
- date: 연, 월, 일만 포함하는 날짜 객체.
- time: 시, 분, 초, 마이크로초만 포함하는 시간 객체.
- datetime: 연, 월, 일, 시, 분, 초, 마이크로초를 모두 포함하는 날짜 및 시간 객체. (가장 많이 사용됨)
- timedelta: 두 날짜 또는 시간 사이의 간격(차이)을 나타내는 객체.
Part 2: datetime 객체 생성 및 현재 시간 얻기
datetime 클래스를 사용하여 특정 날짜와 시간을 나타내는 객체를 생성하거나, 현재 날짜와 시간을 얻을 수 있습니다.
1. datetime.now() - 현재 날짜와 시간 얻기
- datetime.now(): 현재 시스템의 날짜와 시간을 datetime 객체로 반환합니다.
예시:
# 파일 이름: datetime_now.py
from datetime import datetime
# 현재 날짜와 시간 얻기
current_datetime = datetime.now()
print(f"현재 날짜 및 시간: {current_datetime}")
# 특정 날짜 및 시간으로 객체 생성
# datetime(년, 월, 일, 시, 분, 초, 마이크로초)
specific_datetime = datetime(2025, 7, 5, 14, 30, 0, 123456)
print(f"특정 날짜 및 시간: {specific_datetime}")
# 날짜(date) 객체만 얻기
current_date = datetime.now().date()
print(f"현재 날짜: {current_date}")
# 시간(time) 객체만 얻기
current_time = datetime.now().time()
print(f"현재 시간: {current_time}")
[VS Code 터미널 출력]

2. date 객체와 time 객체 생성
- date(년, 월, 일): 날짜 객체를 생성합니다.
- time(시, 분, 초, 마이크로초): 시간 객체를 생성합니다.
예시:
# 파일 이름: date_time_objects.py
from datetime import date, time
# date 객체 생성
my_birthday = date(1990, 5, 15)
print(f"내 생일: {my_birthday}")
print(f"연도: {my_birthday.year}, 월: {my_birthday.month}, 일: {my_birthday.day}")
# time 객체 생성
meeting_time = time(9, 30, 0) # 오전 9시 30분
print(f"회의 시간: {meeting_time}")
print(f"시: {meeting_time.hour}, 분: {meeting_time.minute}, 초: {meeting_time.second}")
[VS Code 터미널 출력]

Part 3: timedelta - 날짜/시간 간격 계산
timedelta 객체는 두 date 또는 datetime 객체 사이의 시간 간격을 나타냅니다. 날짜와 시간에 특정 기간을 더하거나 빼는 데 사용됩니다.
1. timedelta 객체 생성 및 사용
- timedelta(days=N, hours=N, minutes=N, seconds=N, microseconds=N, weeks=N): 다양한 시간 단위로 간격을 생성합니다.
예시:
# 파일 이름: timedelta_example.py
from datetime import datetime, timedelta
# 현재 날짜 및 시간
now = datetime.now()
print(f"현재: {now}")
# 7일 후의 날짜
seven_days_later = now + timedelta(days=7)
print(f"7일 후: {seven_days_later}")
# 3시간 30분 전의 시간
three_half_hours_ago = now - timedelta(hours=3, minutes=30)
print(f"3시간 30분 전: {three_half_hours_ago}")
# 두 datetime 객체 간의 차이 계산
event_start = datetime(2025, 7, 10, 10, 0, 0)
event_end = datetime(2025, 7, 12, 18, 30, 0)
duration = event_end - event_start
print(f"이벤트 기간: {duration}")
print(f"이벤트 기간 (총 초): {duration.total_seconds()}초")
print(f"이벤트 기간 (일): {duration.days}일")
[VS Code 터미널 출력]

Part 4: 날짜/시간 형식화 - strftime()과 strptime()
날짜와 시간 객체를 사람이 읽기 쉬운 문자열로 변환하거나(형식화), 반대로 문자열을 날짜/시간 객체로 파싱(변환)하는 것은 매우 중요합니다.
1. strftime() - 날짜/시간 객체를 문자열로 (Format Time)
- strftime(format_code): datetime 객체를 원하는 형식의 문자열로 변환합니다. format_code는 특정 날짜/시간 요소를 나타내는 지시자(directive)들의 조합입니다.
주요 형식 지시자:
지시자 | 설명 | 예시 (2025년 7월 5일 14시 30분 05초) |
%Y | 4자리 연도 | 2025 |
%m | 2자리 월 (01-12) | 07 |
%d | 2자리 일 (01-31) | 05 |
%H | 24시간 형식 시 (00-23) | 14 |
%I | 12시간 형식 시 (01-12) | 02 |
%M | 2자리 분 (00-59) | 30 |
%S | 2자리 초 (00-59) | 05 |
%f | 6자리 마이크로초 (000000-999999) | 000000 |
%A | 요일의 전체 이름 (Sunday, Monday, ...) | Saturday |
%a | 요일의 짧은 이름 (Sun, Mon, ...) | Sat |
%B | 월의 전체 이름 (January, February, ...) | July |
%b | 월의 짧은 이름 (Jan, Feb, ...) | Jul |
%p | AM/PM | PM |
%c | 지역 시간과 날짜 표현 | Sat Jul 5 14:30:05 2025 |
%x | 지역 날짜 표현 | 07/05/25 |
%X | 지역 시간 표현 | 14:30:05 |
예시:
# 파일 이름: strftime_example.py
from datetime import datetime
now = datetime.now()
# 다양한 형식으로 문자열 변환
formatted_date = now.strftime("%Y년 %m월 %d일")
print(f"날짜만: {formatted_date}")
formatted_time = now.strftime("%H시 %M분 %S초")
print(f"시간만 (24시): {formatted_time}")
formatted_ampm_time = now.strftime("%I:%M %p")
print(f"시간만 (12시 AM/PM): {formatted_ampm_time}")
full_format = now.strftime("%Y-%m-%d %A %H:%M:%S")
print(f"전체 형식: {full_format}")
# 파일 이름에 사용하기 좋은 형식
file_timestamp = now.strftime("%Y%m%d_%H%M%S")
print(f"파일 타임스탬프: {file_timestamp}")
[VS Code 터미널 출력]

2. strptime() - 문자열을 날짜/시간 객체로 (Parse Time)
- strptime(string, format_code): 특정 형식의 문자열을 datetime 객체로 변환합니다. string과 format_code가 정확히 일치해야 합니다.
예시:
# 파일 이름: strptime_example.py
from datetime import datetime
date_string1 = "2024-03-15 10:30:00"
format_code1 = "%Y-%m-%d %H:%M:%S"
dt_object1 = datetime.strptime(date_string1, format_code1)
print(f"'{date_string1}' -> {dt_object1}")
date_string2 = "2023년 12월 25일"
format_code2 = "%Y년 %m월 %d일"
dt_object2 = datetime.strptime(date_string2, format_code2)
print(f"'{date_string2}' -> {dt_object2}")
# 잘못된 형식으로 파싱 시도 (ValueError 발생)
try:
wrong_string = "15-03-2024"
wrong_format = "%Y-%m-%d" # 형식이 일치하지 않음
datetime.strptime(wrong_string, wrong_format)
except ValueError as e:
print(f"\n오류 발생: {e}")
print("문자열과 형식 코드가 일치해야 합니다.")
[VS Code 터미널 출력]

마무리하며
이번 시간에는 파이썬에서 날짜와 시간을 다루는 데 필수적인 datetime 모듈에 대해 자세히 알아보았습니다.
- datetime 클래스: 날짜와 시간을 모두 포함하는 객체. datetime.now()로 현재 시간 얻기.
- date 클래스: 연, 월, 일만 포함하는 날짜 객체.
- time 클래스: 시, 분, 초, 마이크로초만 포함하는 시간 객체.
- timedelta 클래스: 날짜/시간 간격을 나타내며, 덧셈/뺄셈 연산에 사용.
- strftime(): datetime 객체를 원하는 형식의 문자열로 변환.
- strptime(): 특정 형식의 문자열을 datetime 객체로 변환 (형식 일치 중요).
datetime 모듈은 시간 관련 데이터를 정확하고 유연하게 다룰 수 있게 해주는 강력한 도구입니다. 로그 기록, 이벤트 스케줄링, 데이터 분석 등 다양한 애플리케이션에서 매우 유용하게 활용될 것입니다.
이것으로 '파이썬 고급 문법 & 실전 예제' 챕터의 다섯 번째 포스팅이 마무리됩니다. 다음 포스팅에서는 파이썬에서 정규 표현식(Regular Expression)을 사용하여 문자열을 검색하고 조작하는 방법에 대해 알아보겠습니다.
궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!
'Python' 카테고리의 다른 글
7-9. 정규 표현식(Regular Expression)으로 문자열 다루기 (0) | 2025.07.09 |
---|---|
7-7. os 모듈과 pathlib 모듈 (0) | 2025.07.06 |
7-5. 가상 환경(Virtual Environment)의 이해와 사용법 (0) | 2025.07.05 |
7-3. 데코레이터(Decorator) 이해하기 (0) | 2025.07.03 |
7-2. 제너레이터(Generator)와 yield 키워드 (0) | 2025.07.03 |