Dado un DateTime
que representa la fecha de nacimiento de una persona, ¿cómo puedo calcular su edad en años?
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.
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 :-)
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.