Bất cứ ai có thể giải thích toán học hay đơn giản là lý do đằng sau các phép tính năm nhuận trong .NET khi sử dụng phương thức AddYears trên DateTime?Hành vi của DateTime.AddYears vào năm nhuận
- Nếu bạn thực hiện ngày 29 tháng 2 năm 2012 và thêm một năm, bạn nhận được ngày 28 tháng 2 năm 2013, không phải ngày 1 tháng 3 năm 2013 (ngày trước một năm sau).
- Nếu bạn thêm một năm đến ngày 31 tháng 1 năm 2012, bạn nhận được ngày 31 tháng 1 năm 2013 (cùng một ngày sau một năm).
Tôi nghĩ hầu hết mọi người sẽ giả định rằng "một năm từ 29.02.leapX là 01.03.leapX + 1".
Ví dụ:
// 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
[MSDN] (http://msdn.microsoft.com/en-us/library/system.datetime.addyears.aspx) khá rõ ràng: "Phương pháp AddYears tính toán năm kết quả tính đến năm nhuận. phần tháng và thời gian trong ngày của đối tượng DateTime kết quả vẫn giữ nguyên như thể hiện này. " –