¿Cómo puedo calcular la edad de alguien en C#?

Dado un DateTime que representa la fecha de nacimiento de una persona, ¿cómo puedo calcular su edad en años?

Solución

Una solución fácil de entender y sencilla.

// Save today's date.
var today = DateTime.Today;
// Calculate the age.
var age = today.Year - birthdate.Year;
// Go back to the year the person was born in case of a leap year
if (birthdate.Date > today.AddYears(-age)) age--;

Sin embargo, esto supone que se busca la idea occidental de la edad y no se utiliza el cálculo de Asia oriental.

Comentarios (34)

Otra función, no hecha por mí pero encontrada en la web y refinada un poco:

public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year - birthDate.Year;

    if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
        age--;

    return age;
}

Sólo dos cosas que se me ocurren: ¿Qué pasa con la gente de países que no usan el calendario gregoriano? DateTime.Now está en la cultura específica del servidor, creo. Tengo absolutamente 0 conocimientos sobre el trabajo real con los calendarios asiáticos y no sé si hay una manera fácil de convertir las fechas entre los calendarios, pero sólo en caso de que usted' se pregunta acerca de los chinos del año 4660 :-)

Comentarios (1)

La mejor manera que conozco por los años bisiestos y todo eso es:

DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);

Espero que esto ayude.

Comentarios (0)