public static ExtendedDateTime AddMonths(ExtendedDateTime e, int monthsToAdd, DayExceedsDaysInMonthStrategy dayExceedsDaysInMonthStrategy)
        {
            var monthTotal = e.Month + monthsToAdd;
            var month      = monthTotal % 12;

            if (month == 0)
            {
                month = 12;
            }

            var year = e.Year + (monthTotal - 1) / 12;
            var day  = e.Day;

            if (day > DaysInMonth(year, month))
            {
                switch (dayExceedsDaysInMonthStrategy)
                {
                case DayExceedsDaysInMonthStrategy.RoundDown:
                    day = DaysInMonth(year, month);
                    break;

                case DayExceedsDaysInMonthStrategy.Overflow:
                    day        = day - DaysInMonth(year, month);
                    monthTotal = month + 1;
                    month      = monthTotal % 12;

                    if (month == 0)
                    {
                        month = 12;
                    }

                    year = e.Year + (monthTotal - 1) / 12;
                    break;
                }
            }

            var extendedDateTime = new ExtendedDateTime(year, month, e.Day, e.Hour, e.Minute, e.Second, e.UtcOffset.Hours, e.UtcOffset.Minutes);

            extendedDateTime.YearFlags  = e.YearFlags;
            extendedDateTime.MonthFlags = e.MonthFlags;
            extendedDateTime.DayFlags   = e.DayFlags;
            extendedDateTime.Precision  = e.Precision;

            return(extendedDateTime);
        }
示例#2
0
 public ExtendedDateTime AddMonths(int count, DayExceedsDaysInMonthStrategy dayExceedsDaysInMonthStrategy = DayExceedsDaysInMonthStrategy.RoundDown)
 {
     return(ExtendedDateTimeCalculator.AddMonths(this, count, dayExceedsDaysInMonthStrategy));
 }