날짜와 시간을 조작하는 것은 모든 프로그래밍 언어에서 빼놓을 수 없는 필수 작업입니다. Python은 표준 라이브러리에 datetime 모듈을 포함하고 있어, 날짜와 시간 관련 거의 모든 기능과 함수를 별도 설치 없이 바로 사용할 수 있습니다. 이 글에서는 datetime 모듈을 활용해 날짜와 시간을 처리하는 다양한 방법을 예제와 함께 살펴보겠습니다.
현재 날짜 다루기
datetime 모듈에는 datetime이라는 클래스가 내장되어 있습니다. 이 클래스를 임포트해 datetime 객체를 생성한 뒤, 다양한 포매팅 기법을 적용하여 날짜와 시간 값을 표시할 수 있습니다. 먼저 now() 함수로 현재 시각이 담긴 datetime 객체를 생성합니다. 이 객체는 현재 날짜와 시간의 모든 구성 요소(연, 월, 일, 시, 분, 초)를 담고 있으며, 이후 각 부분을 자유롭게 조작할 수 있습니다.
예제
from datetime import datetime
dt_time_obj = datetime.now()
# 현재 날짜와 시간 출력
print(dt_time_obj)
# 객체의 클래스 확인
print('Object Class :- ',type(dt_time_obj))
실행 결과
2020-01-22 09:33:02.693863 Object Class :- <class 'datetime.datetime'>
datetime과 문자열 상호 변환
strptime과 strftime 메서드를 사용하면 문자열을 datetime으로, datetime을 문자열로 변환할 수 있습니다. 실무에서는 여러 데이터 소스를 다루다 보면 데이터가 Python이 인식하는 날짜·시간 형식과 정확히 일치하지 않는 경우가 많기 때문에 이러한 변환 작업은 필수적입니다. 아래 예제에서는 문자열을 datetime으로 변환하고, 반대로 datetime을 문자열로 되돌리는 과정을 보여줍니다.
예제
from datetime import datetime
dt_string = '2020-1-30 2-52-59'
# 문자열로부터 date 객체 생성
date_val = datetime.strptime(dt_string, "%Y-%m-%d %H-%M-%S")
print(date_val)
print('Class: ',type(date_val))
print("\n")
# date 객체로부터 문자열 생성
date_val_str = datetime.strftime(date_val, "%Y-%m-%d %H-%M-%S")
print(date_val_str)
print('Class: ',type(date_val_str))
실행 결과
2020-01-30 02:52:59 Class: <class 'datetime.datetime'> 2020-01-30 02-52-59 Class: <class 'str'>
날짜·시간 값의 특정 부분 추출하기
지시자(directive)와 strftime 메서드를 함께 사용하면 날짜에서 원하는 부분만 골라 추출할 수 있습니다. 아래 표는 자주 쓰이는 지시자와 그 용도를 정리한 것입니다. 전체 지시자 목록은 Python 공식 문서를 참고하시기 바랍니다.
| 지시자 | 용도 |
|---|---|
| %A | 요일 이름 |
| %B | 월 이름 |
| %M | 분 |
| %Y | 연도 |
| %d | 일 (월 기준) |
아래 예제는 지시자를 실제로 활용하는 방법을 보여줍니다.
예제
from datetime import datetime
dt_string = '2020-1-30 2-52-59'
# 문자열로부터 date 객체 생성
date_val = datetime.strptime(dt_string, "%Y-%m-%d %H-%M-%S")
# 연도, 일, 월 이름, 요일 이름 출력:
print(date_val.year)
print(date_val.strftime("%d"))
print(date_val.strftime("%B"))
print(date_val.strftime("%A"),"\n")
실행 결과
2020 30 January Thursday
날짜·시간 연산
이번에는 날짜와 시간을 활용한 계산 방법을 알아보겠습니다. 특정 날짜에 일수나 시간을 더하거나 뺄 수 있으며, 두 날짜를 입력받아 다양한 연산을 적용할 수도 있습니다.
timedelta 활용하기
timedelta 클래스를 사용하면 특정 날짜에 원하는 기간을 더하거나 뺀 새로운 날짜를 손쉽게 계산할 수 있습니다.
예제
# datetime 임포트
from datetime import *
# 현재 시각 구하기
dt_time_today = datetime.now()
print ("Today's date: ", str(dt_time_today))
# 현재 날짜에 5일 더하기
new_date = dt_time_today + timedelta(days = 5)
print('After 5 days: ', new_date)
# 현재 날짜에서 2주 빼기
two_weeks_back = dt_time_today - timedelta(weeks = 2)
print('Two weeks ago: ', two_weeks_back)
print('two_weeks_back object type: ', type(two_weeks_back))
실행 결과
Today's date: 2020-01-29 12:38:03.290795 After 5 days: 2020-02-03 12:38:03.290795 Two weeks ago: 2020-01-15 12:38:03.290795 two_weeks_back object type: <class 'datetime.datetime'>
연산자 활용하기
두 날짜 사이에 연산자를 적용할 수도 있습니다. 마이너스(-) 연산자로 두 날짜의 차이를 구할 수 있고, 비교 연산자로 두 날짜의 선후 관계를 판단할 수 있습니다.
예제
from datetime import datetime
# 주어진 날짜
date1 = datetime(2018,5, 12, 8, 11, 53)
date2 = datetime(2017, 6, 16, 12, 43, 27)
# 두 날짜의 차이
date_diff = date1-date2
print("Difference: ", date_diff)
# 두 날짜 비교
print(date1 < date2)
실행 결과
Difference: 329 days, 19:28:26 False