Может ли кто-нибудь объяснить математическое или просто рассуждение за вычислениями високосного года в .NET при использовании метода AddYears в DateTime?
- Если вы возьмете 29 февраля 2012 года и добавите год, вы получите 28 февраля 2013 года, а не 1 марта 2013 года (день до года).
- Если вы добавите один год до 31 января 2012 года, вы получите 31 января 2013 года (в тот же день через год).
Я думаю, что большинство людей полагают, что "один год с 29.02.leapX равен 01.03.leapX + 1".
Пример:
// Testing with 29th Feb
var now1 = DateTime.Parse("2012-02-29 15:00:00");
var results1 = new DateTime[]
{
now1.AddYears(1),
now1.AddYears(2),
now1.AddYears(3),
now1.AddYears(4)
};
foreach(var dt in results1)
{
Console.WriteLine(dt.ToString("s"));
}
// Output:
// 2013-02-28T15:00:00
// 2014-02-28T15:00:00
// 2015-02-28T15:00:00
// 2016-02-29T15:00:00
// Testing with 31st Jan
var now2 = DateTime.Parse("2012-01-31 13:00:00");
var results2 = new DateTime[]
{
now2.AddYears(1),
now2.AddYears(2),
now2.AddYears(3),
now2.AddYears(4)
};
foreach(var dt in results2)
{
Console.WriteLine(dt.ToString("s"));
}
// Output:
// 2013-01-31T13:00:00
// 2014-01-31T13:00:00
// 2015-01-31T13:00:00
// 2016-01-31T13:00:00