Маючи ДатаЧас
, що представляє день народження людини, як я можу обчислити її вік у роках?
Легке для розуміння і просте рішення.
// 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--;
Однак, це припускає, що ви шукаєте західне уявлення про вік, а не використовуєте східноазійське літочислення.
Ще одна функція, не мною розроблена, а знайдена в інтернеті і трохи доопрацьована:
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;
}
Лише дві речі, які спадають мені на думку: Як бути з людьми з країн, які не використовують григоріанський календар? Я думаю, що DateTime.Now знаходиться в специфічній культурі сервера. Я абсолютно нічого не знаю про роботу з азіатськими календарями і не знаю, чи існує простий спосіб конвертації дат між календарями, але про всяк випадок, якщо вам цікаво про тих китайських хлопців з 4660 року :-)
Найкращий спосіб, який я знаю через високосні роки і все інше:
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
Сподіваюся, це допоможе.