Ako vypočítam vek osoby v rokoch, ak je zadaný DateTime
, ktorý predstavuje dátum narodenia osoby?
Jednoduché a zrozumiteľné riešenie.
// 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--;
Predpokladá to však, že hľadáte západnú predstavu o veku a nepoužívate Východoázijské počítanie.
Ďalšia funkcia, ktorú som nenašiel ja, ale našiel som ju na webe a trochu ju vylepšil:
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;
}
Len dve veci, ktoré ma napadli: Čo ľudia z krajín, ktoré nepoužívajú gregoriánsky kalendár? DateTime.Now je myslím v kultúre špecifickej pre server. O skutočnej práci s ázijskými kalendármi mám absolútne nulové vedomosti a neviem, či existuje jednoduchý spôsob, ako konvertovať dátumy medzi kalendármi, ale pre prípad, že by'ste sa zaujímali o tých Číňanov z roku 4660 :-)
Najlepší spôsob, ktorý poznám kvôli priestupným rokom a všetkému, je:
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
Dúfam, že to pomôže.