이 솔루션은 12 월에 올바르게 작동하지만이 페이지의 답변 대부분은 그렇지 않습니다. 계수 (%) 또는 정수 나누기 (//)를 사용하기 전에 먼저 월을 기수 1 (예 : Jan = 1)에서 기수 0 (예 : Jan = 0)으로 이동해야합니다. 그렇지 않으면 11 월 (11)에 1 개월을 더한 값은 12입니다. 나머지 (12 % 12)를 찾을 때 0을 얻습니다.
(그리고 "(month % 12) + 1"또는 Oct + 1 = december를 제안하지 마십시오!)
def AddMonths(d,x):
newmonth = ((( d.month - 1) + x ) % 12 ) + 1
newyear = int(d.year + ((( d.month - 1) + x ) / 12 ))
return datetime.date( newyear, newmonth, d.day)
그러나 ... 1 월 31 일 + 1 개월과 같은 문제는 설명하지 않습니다. 다시 OP로 돌아갑니다. 한 달을 추가하면 무엇을 의미합니까? 한 가지 해결책은 대부분의 사람들이 1 월 마지막 날을 추정하고 1 개월은 2 월 마지막 날과 같다는 점을 감안할 때 유효한 날에 도달 할 때까지 역 추적하는 것입니다. 증명:
>>> import datetime
>>> AddMonths(datetime.datetime(2010,8,25),1)
datetime.date(2010, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),4)
datetime.date(2010, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),5)
datetime.date(2011, 1, 25)
>>> AddMonths(datetime.datetime(2010,8,25),13)
datetime.date(2011, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),24)
datetime.date(2012, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-1)
datetime.date(2010, 7, 25)
>>> AddMonths(datetime.datetime(2010,8,25),0)
datetime.date(2010, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-12)
datetime.date(2009, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-8)
datetime.date(2009, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-7)
datetime.date(2010, 1, 25)>>>