본문 바로가기
프로그래밍/기타 Python 모듈

dateutil 모듈을 이용하여 datetime 객체 다루기

by 부자 꽁냥이 2023. 3. 25.

dateutil 모듈은 파이썬(Python)에서 제공하는 datetime 객체를 다루기 위한 여러 가지 유틸 함수를 제공한다. 이번 포스팅에서는 dateutil과 관련하여 자주 사용하는 몇 가지 함수를 알아보려고 한다.


   dateutil 모듈 사용법

1) 날짜 계산 : relativedelta

a. 특정 날짜를 기준으로 과거 또는 미래 날짜 계산하기

relativedelta 객체를 이용하면 특정 날짜를 기준으로 과거 또는 미래 날짜를 계산할 수 있다. 아래 코드는 현재 시점을 기준으로 과거 또는 미래 시점을 연, 월, 일 단위로 계산한다.

 

from datetime import datetime
from dateutil.relativedelta import relativedelta

now = datetime.now().date()
print('현재 날짜', now)
print('작년', now+relativedelta(years=-1)) 
print('두달전', now+relativedelta(months=-2)) 
print('3일 후', now+relativedelta(days=3)) 
print('1년 3달 후', now+relativedelta(years=1, months=3))

 

 

b. 두 날짜의 차이 계산

relativedelta에서 첫 번째, 두 번째 인자에 datetime 객체를 넣어주면 두 날짜간 차이를 계산할 수 있다.

year, month, day = 1981, 1, 1
res = relativedelta(now, datetime(year, month, day)) ## 현재 날짜와 1981년 1월 1일과의 날짜 차이
print(f'{res.years} years, {res.months} months, {res.days} days')

 


2) 파싱(Parsing)

여기서 말하는 파싱(Parsing)이란 문자열로부터 날짜 패턴을 자동으로 인식하여 datetime 객체로 변환해 주는 것을 의미한다. dateutil에서 parse를 이용하여 파싱할 수 있다. parse는 문자열을 넣어주면 해당 문자열을 해석하여 datetime 객체로 변환해 준다.

 

from dateutil.parser import parse

print(parse('20191111231519'), type(parse('20191111231519')))
print(parse('2019-11-11 23:15:19'))
print(parse('2019/11/11'))

 


3) datetime 객체 시퀀스 생성 : rrule

dateutil에서 rrule을 이용하면 datetime 객체를 원소로 하는 시퀀스를 생성할 수 있다. 아래 코드는 이러한 시퀀스를 사용하는 예제이다.

 

아래 코드는 1987년 11월 11일을 기준으로 일 단위, 월 단위, 연 단위로 5개의 원소를 갖는 시퀀스(배열)를 생성한다. 이때 rrule은 제너레이터이므로 list로 감싸서 배열로 만들어준다.

 

from dateutil.rrule import rrule, DAILY, MONTHLY, YEARLY
from pprint import pprint

## 1987년 11월 11일부터 하루 단위로 datetime 객체 5개를 포함하는 리스트 생성
datetime_sequence_day = rrule(DAILY, count=5, dtstart=parse('19871111'))
## 1987년 11월 11일부터 월 단위로 datetime 객체 5개를 포함하는 리스트 생성
datetime_sequence_month = rrule(MONTHLY, count=5, dtstart=parse('19871111'))
## 1987년 11월 11일부터 연 단위로 datetime 객체 5개를 포함하는 리스트 생성
datetime_sequence_year = rrule(YEARLY, count=5, dtstart=parse('19871111'))
pprint('일 단위 시퀀스')
pprint(list(datetime_sequence_day))
pprint('월 단위 시퀀스')
pprint(list(datetime_sequence_month))
pprint('연 단위 시퀀스')
pprint(list(datetime_sequence_year))

 


댓글


맨 위로