2010-11-08 94 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); 
    } 
}