在DateTime上使用AddYears方法时,有人可以解释.NET中闰年计算背后的数学或简单推理吗?
- 如果您参加2012年2月29日并增加一年,您将获得2013年2月28日,而不是2013年3月1日(一年后的前一天)。
- 如果您在2012年1月31日之前添加一年,则会在2013年1月31日(一年后的同一日期)到达。
我想大多数人会认为“一年从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