2010-11-08 21 views
16

Quiero agregar la fecha de entrada + 1 año a una columna llamada fecha de finalización.Revisar el año bisiesto en C#

Si la fecha de entrada es en el año bisiesto, necesito agregar 364 días, sino 365 días.

¿Hay alguna manera de comprobar esto en C#, utilizando el año de datetime actual & manipular salto año/no, luego agregar los días.

Gracias.

+16

no puedes usar 'DateTime.AddYears (1)'? –

+2

Debe agregar 366 días si es un año bisiesto :) –

+0

O 365, si la fecha es anterior al 29 de febrero. Pero .AddYears (1) es la versión más despreocupada. – TeaDrivenDev

Respuesta

43

Puede usar el método DateTime.IsLeapYear.

Pero solo para el manejo que realmente no necesita usar ese método. DateTime.AddYears tiene en cuenta los años bisiestos.

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

Gracias, estaba a punto de escribir eso. Voy a marcar eso como una respuesta aceptada. – Sharpeye500

+0

Gracias, pero estoy usando DateTime.Now.AddYears (1) en el código que es 1 línea de código y más lógica. – Sharpeye500

+0

@ Sharpeye500 - Por supuesto, 'AddYears' es mejor que' IsLeapYear' en su situación. También lo he incluido en la respuesta. Aunque un minuto después del comentario de Jon B, es cierto :) – 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

Me parece más ordenado como un método de extensión:

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