DateTime.AddMonthsとDateTime.AddYearsのメモ

ちょっとした発見。

DateTime.AddMonthsメソッドは、結果の月にその日が存在しない場合はその月の末日に調整してくれます。

文章にするといまいちなのでコードで例を。

// 2016/08/31 + 1ヶ月
// 2016年9月は30日までなので結果は2016/09/30になる
new DateTime(2016, 8, 31).AddMonths(1);

// 結果
// 2016/09/30 0:00:00

DateTime.AddYearsも同じ動き。

// 2016/02/29 + 1年
// 2017年2月は28日までなので結果は2017/02/08になる
new DateTime(2016, 2, 29).AddYears(1);

// 結果
// 2017/02/28 0:00:00

知らなかった。

MSDNにも書いてありました。

結果として得られる日が有効な結果として得られる、月 1 日でないと、結果として得られる月の最終有効日が使用されます。例では、3 月 31 日 + 1 か月 = 4 月 30 日です。

ちょっと訳が微妙な部分もあるので英語のほうがわかりやすいかなって気もします。

If the resulting day is not a valid day in the resulting month, the last valid day of the resulting month is used. For example, March 31st + 1 month = April 30th, and March 31st - 1 month = February 28 for a non-leap year and February 29 for a leap year.