AddMonthsメソッドで月単位の加減算を行った結果その月の末日を超える場合は、日付の部分はその月の末日となります。 例えば、1月31日から3ヶ月加算した場合、4月31日は4月の末日を超えるため結果は4月30日となります。 同様に、1月31日から1ヶ月加算した場合、結果はうるう年であれば2月28日、そうでなければ2月29日となります。

DateTime/DateTimeOffset.AddMonthsで1月31日のnヶ月後の日付を求める場合の動作
using System;

class Sample {
  static void Main()
  {
    var baseDate = new DateTime(2015, 1, 31);

    Console.WriteLine("{0} + 1 months = {1}", baseDate, baseDate.AddMonths(+1));
    Console.WriteLine("{0} + 2 months = {1}", baseDate, baseDate.AddMonths(+2));
    Console.WriteLine("{0} + 3 months = {1}", baseDate, baseDate.AddMonths(+3));
    Console.WriteLine();

    baseDate = new DateTime(2016, 1, 31);

    Console.WriteLine("{0} + 1 months = {1}", baseDate, baseDate.AddMonths(+1));
    Console.WriteLine("{0} + 2 months = {1}", baseDate, baseDate.AddMonths(+2));
    Console.WriteLine("{0} + 3 months = {1}", baseDate, baseDate.AddMonths(+3));
  }
}
実行結果
2015/01/31 0:00:00 + 1 months = 2015/02/28 0:00:00
2015/01/31 0:00:00 + 2 months = 2015/03/31 0:00:00
2015/01/31 0:00:00 + 3 months = 2015/04/30 0:00:00

2016/01/31 0:00:00 + 1 months = 2016/02/29 0:00:00
2016/01/31 0:00:00 + 2 months = 2016/03/31 0:00:00
2016/01/31 0:00:00 + 3 months = 2016/04/30 0:00:00

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。