Étant donné une DateTime
représentant l'anniversaire d'une personne, comment puis-je calculer son âge en années ?
Une solution simple et facile à comprendre.
// 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--;
Cependant, cela suppose que vous recherchez l'idée occidentale de l'âge et que vous n'utilisez pas le [calcul de l'Asie de l'Est][1].
[1] : https://en.wikipedia.org/wiki/East_Asian_age_reckoning
Une autre fonction, pas de moi mais trouvée sur le web et que j'ai un peu affinée :
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;
}
Juste deux choses qui me viennent à l'esprit : Qu'en est-il des personnes venant de pays qui n'utilisent pas le calendrier grégorien ? DateTime.Now est dans la culture spécifique au serveur je pense. Je n'ai absolument aucune connaissance sur la façon de travailler avec les calendriers asiatiques et je ne sais pas s'il existe un moyen facile de convertir les dates entre les calendriers, mais juste au cas où vous vous poseriez des questions sur ces Chinois de l'année 4660 :-)
La meilleure façon que je connaisse, à cause des années bissextiles et tout le reste, est la suivante :
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
J'espère que cela vous aidera.