2010-11-08 70 views
16

我想将输入日期+ 1年添加到名为结束日期的列中。在C中检查闰年#

如果入境日期闰年,我需要添加364天,如果不是365天。

有没有办法在c#中使用当前日期时间的年份来检查此问题&操纵闰年/不是,然后添加日期。

谢谢。

+16

你就不能使用'DateTime.AddYears(1)'? – 2010-11-08 21:50:29

+2

如果是闰年,您应该添加366天:) – 2010-11-08 21:53:03

+0

或者365,如果日期是过去2月29日。但是.AddYears(1)是更加无忧无虑的版本。 – TeaDrivenDev 2010-11-08 21:54:21

回答

43

您可以使用DateTime.IsLeapYear方法。

但只是为了处理,你并不真的需要使用该方法。 DateTime.AddYears考虑到闰年。

var leapYear = new DateTime(2000, 2, 29); 
Console.WriteLine("Is 2000 a leap year? {0}", DateTime.IsLeapYear(leapYear.Year)); // 2000 is a leap year 
Console.WriteLine("One year added to {0} is {1}", leapYear, leapYear.AddYears(1)); // 2000-02-29 plus 1 year is 2001-02-28 
+0

谢谢,我正打算输入。我会将其标记为已接受的答案。 – Sharpeye500 2010-11-08 21:49:31

+0

谢谢,但我在代码中使用DateTime.Now.AddYears(1)代码,它是1行代码,更符合逻辑。 – Sharpeye500 2010-11-08 22:44:27

+0

@ Sharpeye500 - 当然,在你的情况下,AddYears比IsLeapYear更好。我在答案中也包括了这一点。虽然Jon B的评论一分钟后,真的:) – Patko 2010-11-08 23:04:21

0
var dateStart = new DateTime(2010,1,10); // Some date to check 
var newDate = DateTime.IsLeapYear(dateStart.Year) ? dateStart.AddDays(365) : dateStart.AddDays(364); 
// or 
var newDate = dateStart.AddYears(1).AddDays(-1); 
0

我觉得这更整洁作为一个扩展的方法:

public static class DateTimeExtensions 
{ 
    public static bool IsLeapYear(this DateTime source) 
    { 
     return DateTime.IsLeapYear(source.Year); 
    } 
}