파이썬 날짜코드 질문
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" target="_blank">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월 및 윤년과 관련하여 복잡할 것 같아요~
올려주신 방식과 유사하게 해결하면 다음과 같이 작성할 수 있겠네요!
</p>
<p>from datetime import date</p>
<p> </p>
<p>def addMonth(d):</p>
<p> newmonth = (d.month % 12) + 1</p>
<p> newyear = int(d.year + (d.month / 12))</p>
<p> return date(newyear, newmonth, d.day)</p>
<p> </p>
<p>today = date.today()</p>
<p>print(addMonth(today))</p>
<p>
그런데 위 스크립트에서 현재 날짜가 2019. 1. 31.라면 에러가 발생합니다 ㅠㅠ
따라서 별도의 모듈을 활용하시는게 수월하실거에요~!
우선 가장 간단하게 작성하려면 relativedelta 모듈을 사용하시면 되어요~
이 모듈은 어떠한 경우에도 잘 작동하도록 되어있어요 ^^
</p>
<p>from datetime import date</p>
<p>from dateutil.relativedelta import relativedelta</p>
<p> </p>
<p>add_1_month = date.today() + relativedelta(months = 1)</p>
<p>print(add_1_month)</p>
<p>
한편 다음과 같이 calendar 모듈을 사용하는 방식도 생각해볼 수 있는데요~
그런데 오늘이 1월 31일인 경우에는 31일을 더하기 때문에 결과가 3월로 넘어갑니다 ㅎㄷㄷ
(1월이 31일까지 있으므로 31일을 더하는 그런 방식이에요)
</p>
<p>from datetime import date, timedelta</p>
<p>import calendar</p>
<p> </p>
<p>today = date.today()</p>
<p>addMonth = timedelta(days=calendar.monthrange(today.year, today.month)[1])</p>
<p>result = today + addMonth</p>
<p>print(result)</p>
<p>
그럼 남은 주말 즐겁게 보내세요 ^-^
감사합니다!
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인