파이썬 날짜코드 질문

 https://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime?page=2&tab=votes#tab-top

---------------------------------------------------

from datetime import date

def after_month(given_date, month):

    yyyy = int(((given_date.year * 12 + given_date.month) + month)/12)

    mm = int(((given_date.year * 12 + given_date.month) + month)%12)

    if mm == 0:

        yyyy -= 1

        mm = 12

    return given_date.replace(year=yyyy, month=mm)

 print(next_date, end = ' ')

-----------------------------------------------------

링크에서 처럼 현재날짜를 지정하여 입력하고 한달후를 출력하고 싶으면 위코드에 무엇을 추가하고 수정해줘야 할까요?

답변 1개

안녕하세요?

datetime.date로 해결하려면 2월 및 윤년과 관련하여 복잡할 것 같아요~

올려주신 방식과 유사하게 해결하면 다음과 같이 작성할 수 있겠네요!

Copy
from datetime import date

 

def addMonth(d):

    newmonth = (d.month % 12) + 1

    newyear  = int(d.year + (d.month / 12))

    return date(newyear, newmonth, d.day)

 

today = date.today()

print(addMonth(today))

그런데 위 스크립트에서 현재 날짜가 2019. 1. 31.라면 에러가 발생합니다 ㅠㅠ

따라서 별도의 모듈을 활용하시는게 수월하실거에요~!

우선 가장 간단하게 작성하려면 relativedelta 모듈을 사용하시면 되어요~

이 모듈은 어떠한 경우에도 잘 작동하도록 되어있어요 ^^

Copy
from datetime import date

from dateutil.relativedelta import relativedelta

 

add_1_month = date.today() + relativedelta(months = 1)

print(add_1_month)

한편 다음과 같이 calendar 모듈을 사용하는 방식도 생각해볼 수 있는데요~

그런데 오늘이 1월 31일인 경우에는 31일을 더하기 때문에 결과가 3월로 넘어갑니다 ㅎㄷㄷ

(1월이 31일까지 있으므로 31일을 더하는 그런 방식이에요)

Copy
from datetime import date, timedelta

import calendar

 

today = date.today()

addMonth = timedelta(days=calendar.monthrange(today.year, today.month)[1])

result = today + addMonth

print(result)

그럼 남은 주말 즐겁게 보내세요 ^-^

감사합니다!

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고