2010-11-08 42 views
16

Desidero aggiungere la data di inserimento + 1 anno a una colonna chiamata data di fine.Verifica anno bisestile in C#

Se la data di ingresso è scaduta, è necessario aggiungere 364 giorni, se non 365 giorni.

C'è un modo per controllare questo in C#, utilizzando l'anno corrente datetime & manipolare il salto di qualità/non, quindi aggiungere i giorni.

Grazie.

+16

Non puoi semplicemente usare 'DateTime.AddYears (1)'? –

+2

È necessario aggiungere 366 giorni se è un anno bisestile :) –

+0

o 365, se la data è scaduta il 29 febbraio. Ma. AddYears (1) è la versione più spensierata. – TeaDrivenDev

risposta

43

È possibile utilizzare il metodo DateTime.IsLeapYear.

Ma solo per la gestione che non è necessario utilizzare tale metodo. DateTime.AddYears tiene conto degli anni bisestili.

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

Grazie, stavo per scriverlo. Lo segnerò come risposta accettata. – Sharpeye500

+0

Grazie, ma sto usando DateTime.Now.AddYears (1) nel codice che è 1 riga di codice e più logico. – Sharpeye500

+0

@ Sharpeye500 - Naturalmente, 'AddYears' è migliore di' IsLeapYear' nella tua situazione. Ho incluso anche quello nella risposta. Anche se un minuto dopo il commento di Jon B, vero :) – Patko

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

Trovo questo più ordinato come un metodo di estensione:

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