Dado um "DateTime" representando o aniversário de uma pessoa' como faço para calcular a sua idade em anos?
Uma solução fácil de entender e simples.
// 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--;
No entanto, isto pressupõe que você está procurando a idéia ocidental da idade e não está usando Cálculo da Ásia Oriental.
Outra função, não por mim, mas encontrada na web e refinou-a um pouco:
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;
}
Apenas duas coisas que me vêm à cabeça: E as pessoas de países que não usam o calendário gregoriano? DateTime.Now está na cultura específica do servidor, acho eu. Eu tenho absolutamente 0 conhecimento sobre trabalhar realmente com calendários asiáticos e não sei se existe uma maneira fácil de converter datas entre calendários, mas só para o caso de você estar se perguntando sobre aqueles caras chineses do ano 4660 :-)
A melhor maneira que eu conheço por causa dos anos bissextos e de tudo é:
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
Espero que isto ajude.