[Python] 파이썬 이전 날짜, 이후 날짜 구하기(n달 뒤, n년 전)

한 남자와 여자가 사랑에 빠졌습니다. 사귀기로 한 날을 기점으로 100일 후, 3달 뒤, 1년 뒤를 기념일로 지정하기로 했습니다. 파이썬에서는 이런 상황에서 어떻게 날짜를 특정할 수 있을까요? 이번 포스팅에서는 특정 날짜를 기준으로 이전 날짜, 이후 날짜를 계산하는 방법에 대해서 알아보도록 하겠습니다. 

 

 timedelta 객체 사용 (n일 뒤, n일 전 계산) 

from datetime import datetime, timedelta

today = datetime.today()
day1 = timedelta(days=100) # 100일 뒤
day2 = timedelta(days=30*2) # 2달 뒤
day3 = timedelta(days=365*3) # 3년 뒤

print("현재 날짜:", today)
print("100일 전 날짜:", (today - day1).date())
print("100일 후 날짜:", (today + day1).date())

print("2달 전 날짜:", (today - day2).date())
print("2달 후 날짜:", (today + day2).date())

print("3년 전 날짜:", (today - day3).date())
print("3년 후 날짜:", (today + day3).date())

위의 예제처럼 timedelta 객체를 사용하여 원하는 만큼의 날짜 차이를 더하거나 빼서 날짜를 계산할 수 있습니다. 위와 같이 timedelta의 days 매개변수에 더하고자 하는 날짜 수를 지정하시면 됩니다.

 

하지만 안타깝게도 timedelta를 월(month)이나 년(year)로 직접 구하는 기능은 datetime 모듈에 내장되어 있지 않습니다. 이는 월이나 년의 계산은 상대적으로 복잡하기 때문입니다. 예를 들어, 한 달이 28일, 30일 또는 31일인 경우가 있으며, 연단 위로 가면 윤년을 고려해야 하는 경우도 있습니다.

 

아쉬운 대로 위의 예제에서는 2달은 대략적으로 30 * 2일로 계산하고, 3년은 365 * 3일로 계산하기는 했지만 정확하지는 않은 계산입니다. 정확한 날짜를 도출하고 싶다면 다른 방법이 필요합니다.

 

 

※ timedelta 객체에서 사용할 수 있는 매개변수

사용법 설명
timedelta(days=100) days: 일(day) 단위의 시간 간격을 나타냅니다.
timedelta(second=60) seconds: 초(second) 단위의 시간 간격을 나타냅니다.
timedelta(microsecond=1000) microseconds: 마이크로초(microsecond) 단위의 시간 간격을 나타냅니다.
timedelta(milliseconds=1000) milliseconds: 밀리초(millisecond) 단위의 시간 간격을 나타냅니다.
timedelta(minutes=60) minutes: 분(minute) 단위의 시간 간격을 나타냅니다.
timedelta(hours=60) hours: 시(hour) 단위의 시간 간격을 나타냅니다.
timedelta(weeks=2) weeks: 주(week) 단위의 시간 간격을 나타냅니다.

 


 

 dateutil 객체 사용 (정확한 날짜 계산) 

from datetime import datetime
from dateutil.relativedelta import relativedelta

today = datetime.today()  # 현재 날짜
day1 = today + relativedelta(months=2)  # 현재 날짜에서 2달 뒤 날짜 계산
day2 = today + relativedelta(years=3)  # 현재 날짜에서 3년 뒤 날짜 계산

print("2달 뒤 날짜:", day1)
print("3년 뒤 날짜:", day2)

위에서 설명한대로 일반적으로 사용되는 timedelta 객체에서는 월이나 년 단위로 정확한 날짜이 어렵습니다. 이를 해결하기 위해서 직접 로직을 작성할 수도 있겠지만 가장 쉬운 방법은 dateutil 라이브러리 안에 있는 dateutil.relativedelta 모듈을 사용하는 방법입니다. relativedelta에는 인자값으로 months와 years를 사용할 수 있습니다.

 

 

python-dateutil 설치

파이썬 dateutil이 설치가 되어 있지 않아 위의 예제가 실행되지 않는 분들도 있을 것입니다. cmd 창을 켜신 뒤 명령어  pip install python-dateutil  이라는 명령어를 입력해 주시면 python-dateutil을 설치할 수 있으니 이 라이브러리를 다운로드하고 다시 예제 코드를 실행시켜 주시기 바랍니다.

 

댓글

Designed by JB FACTORY