このソリューションは12月に正しく機能しますが、このページのほとんどの回答では機能しません。モジュラス(%)または整数除算(//)を使用する前に、最初に月をベース1(つまりJan = 1)からベース0(つまりJan = 0)にシフトする必要があります。 、残り(12%12)を見つけると0になります。
(「(月%12)+ 1」または10月+ 1 = 12月を推奨しないでください!)
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つの解決策は、有効な日になるまでバックトラックすることです。ほとんどの人は、janの最終日と推定され、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)>>>