본문 바로가기

Python

7-8. datetime 모듈로 날짜와 시간 다루기

파이썬 dateTime모듈

안녕하세요! 지난 시간에는 파이썬에서 파일 시스템과 상호작용하는 데 필수적인 os 모듈과 pathlib 모듈에 대해 알아보았습니다. 이제 파일과 디렉토리를 효율적으로 관리하고 조작할 수 있게 되었을 거예요!

이번 시간에는 파이썬에서 날짜와 시간을 다루는 데 필수적인 datetime 모듈에 대해 알아보겠습니다. 프로그램 개발 시 현재 시간 기록, 특정 날짜 계산, 시간 간격 측정 등 날짜와 시간 관련 작업은 매우 흔하게 발생합니다.

datetime 모듈은 날짜, 시간, 그리고 날짜와 시간을 모두 포함하는 객체를 제공하여 이러한 작업을 쉽고 정확하게 처리할 수 있도록 돕습니다. 마치 시간 여행을 위한 정교한 도구 상자를 배우는 것과 같다고 생각하시면 됩니다.


Part 1: datetime 모듈의 주요 클래스

datetime 모듈은 주로 다음과 같은 클래스들을 제공합니다.

  • date: 연, 월, 일만 포함하는 날짜 객체.
  • time: 시, 분, 초, 마이크로초만 포함하는 시간 객체.
  • datetime: 연, 월, 일, 시, 분, 초, 마이크로초를 모두 포함하는 날짜 및 시간 객체. (가장 많이 사용됨)
  • timedelta: 두 날짜 또는 시간 사이의 간격(차이)을 나타내는 객체.

Part 2: datetime 객체 생성 및 현재 시간 얻기

datetime 클래스를 사용하여 특정 날짜와 시간을 나타내는 객체를 생성하거나, 현재 날짜와 시간을 얻을 수 있습니다.

1. datetime.now() - 현재 날짜와 시간 얻기

  • datetime.now(): 현재 시스템의 날짜와 시간을 datetime 객체로 반환합니다.

예시:

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 datetime.now() 및 특정 datetime 객체 생성 예시

2. date 객체와 time 객체 생성

  • date(년, 월, 일): 날짜 객체를 생성합니다.
  • time(시, 분, 초, 마이크로초): 시간 객체를 생성합니다.

예시:

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 date 및 time 객체 생성 예시

Part 3: timedelta - 날짜/시간 간격 계산

timedelta 객체는 두 date 또는 datetime 객체 사이의 시간 간격을 나타냅니다. 날짜와 시간에 특정 기간을 더하거나 빼는 데 사용됩니다.

1. timedelta 객체 생성 및 사용

  • timedelta(days=N, hours=N, minutes=N, seconds=N, microseconds=N, weeks=N): 다양한 시간 단위로 간격을 생성합니다.

예시:

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 timedelta를 이용한 날짜/시간 간격 계산 예시

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
Sheets로 내보내기

예시:

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 strftime()을 이용한 날짜/시간 형식화 예시

2. strptime() - 문자열을 날짜/시간 객체로 (Parse Time)

  • strptime(string, format_code): 특정 형식의 문자열을 datetime 객체로 변환합니다. string과 format_code가 정확히 일치해야 합니다.

예시:

Python
 
# 파일 이름: 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 터미널 출력]

파이썬 strptime()을 이용한 문자열을 datetime 객체로 변환 예시

마무리하며

이번 시간에는 파이썬에서 날짜와 시간을 다루는 데 필수적인 datetime 모듈에 대해 자세히 알아보았습니다.

  • datetime 클래스: 날짜와 시간을 모두 포함하는 객체. datetime.now()로 현재 시간 얻기.
  • date 클래스: 연, 월, 일만 포함하는 날짜 객체.
  • time 클래스: 시, 분, 초, 마이크로초만 포함하는 시간 객체.
  • timedelta 클래스: 날짜/시간 간격을 나타내며, 덧셈/뺄셈 연산에 사용.
  • strftime(): datetime 객체를 원하는 형식의 문자열로 변환.
  • strptime(): 특정 형식의 문자열을 datetime 객체로 변환 (형식 일치 중요).

datetime 모듈은 시간 관련 데이터를 정확하고 유연하게 다룰 수 있게 해주는 강력한 도구입니다. 로그 기록, 이벤트 스케줄링, 데이터 분석 등 다양한 애플리케이션에서 매우 유용하게 활용될 것입니다.

이것으로 '파이썬 고급 문법 & 실전 예제' 챕터의 다섯 번째 포스팅이 마무리됩니다. 다음 포스팅에서는 파이썬에서 정규 표현식(Regular Expression)을 사용하여 문자열을 검색하고 조작하는 방법에 대해 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형