파이썬 날짜코드 질문
본문
---------------------------------------------------
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월 및 윤년과 관련하여 복잡할 것 같아요~
올려주신 방식과 유사하게 해결하면 다음과 같이 작성할 수 있겠네요!
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 모듈을 사용하시면 되어요~
이 모듈은 어떠한 경우에도 잘 작동하도록 되어있어요 ^^
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일을 더하는 그런 방식이에요)
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)
그럼 남은 주말 즐겁게 보내세요 ^-^
감사합니다!
!-->!-->!-->