Попробуйте это:
DateTime dtStartOfThisYear = new DateTime( 2011, 11 , 1 ) ;
DateTime dtStartOfNextYear = dtStartOfThisyear.AddYears(1) ;
Если вы откроете метод AddYears()
в Reflector, вы увидите, что он просто вызывает метод AddMonths()
, передав ему значение years * 12
. Умно, а?
И если вы раскроете AddMonths()
, вы увидите
public DateTime AddMonths(int months)
{
if ( ( months < -120000 ) || ( months > 0x1d4c0 ) )
{
throw new ArgumentOutOfRangeException("months", Environment.GetResourceString("ArgumentOutOfRange_DateTimeBadMonths"));
}
int datePart = this.GetDatePart( 0 ) ;
int month = this.GetDatePart( 2 ) ;
int day = this.GetDatePart( 3 ) ;
int num4 = ( month - 1 ) + months ;
if ( num4 >= 0 )
{
month = ( num4 % 12 ) + 1 ;
datePart += num4 / 12 ;
}
else
{
month = 12 + ( ( num4 + 1 ) % 12 ) ;
datePart += ( num4 - 11 ) / 12 ;
}
if ( ( datePart < 1 ) || ( datePart > 0x270f ) )
{
throw new ArgumentOutOfRangeException("months", Environment.GetResourceString("ArgumentOutOfRange_DateArithmetic"));
}
int num5 = DaysInMonth( datePart , month );
if ( day > num5 )
{
day = num5 ;
}
return new DateTime(((ulong) (DateToTicks(datePart, month, day) + (this.InternalTicks % 0xc92a69c000L))) | this.InternalKind);
}
Я полагаю, вы обнаружите, что этот код выполняет то, что вы хотите: например, если вы начнете 29 февраля високосного года и добавите 1 год, вы закончите 28 февраля следующего года.