在 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