Возраст в годах с десятичной точностью с учетом даты и времени - PullRequest
4 голосов
/ 23 марта 2009

Как я могу получить возраст кого-либо, учитывая дату рождения в C # datetime.

Я хочу точный возраст, например 40,69 лет

Ответы [ 6 ]

10 голосов
/ 23 марта 2009

Это вычислит точный возраст. Дробная часть возраста рассчитывается относительно количества дней между последним и следующим днем ​​рождения, поэтому он будет правильно обрабатывать високосные годы.

Дробная часть линейна по году (и не учитывает разную продолжительность месяцев), что, по-видимому, имеет смысл, если вы хотите выразить дробный возраст.

// birth date
DateTime birthDate = new DateTime(1968, 07, 14);

// get current date (don't call DateTime.Today repeatedly, as it changes)
DateTime today = DateTime.Today;
// get the last birthday
int years = today.Year - birthDate.Year;
DateTime last = birthDate.AddYears(years);
if (last > today) {
    last = last.AddYears(-1);
    years--;
}
// get the next birthday
DateTime next = last.AddYears(1);
// calculate the number of days between them
double yearDays = (next - last).Days;
// calcluate the number of days since last birthday
double days = (today - last).Days;
// calculate exaxt age
double exactAge = (double)years + (days / yearDays);
5 голосов
/ 23 марта 2009

Это будет приблизительный расчет:

 TimeSpan span = DateTime.Today.Subtract(birthDate);
 Console.WriteLine( "Age: " + (span.TotalDays / 365.25).toString() );

Кстати: см. Также этот вопрос о переполнении стека: Как рассчитать чей-то возраст в C #?

1 голос
/ 23 марта 2009

40-летняя часть достаточно проста. Но чтобы получить действительно точную десятичную точку, я не уверен, как вы переводите остаток возраста в десятичное число. Вы видите, что возраст выражается в годах, месяцах, днях, часах, секундах. И расчет не так прост. Вам приходится иметь дело с юбилейными датами. Например, если кто-то родился 31 января, когда ему 1 месяц? Ответ 1 марта. Но через несколько лет это происходит через 28 дней, а через несколько лет - через 29 дней. Здесь - это реализация javascript, в которой я пытался разобраться.

Но я полагаю, что десятичное число может выражать количество дней с момента последнего дня рождения, разделенное на количество дней до следующей годовщины дня рождения. И если вы хотите получить более точную информацию, вы можете сделать это за несколько секунд, используя тот же принцип.

Но я думаю, что это плохое представление о возрасте. Мы просто обычно не представляем такой возраст.

И убедитесь, что ваши даты находятся в одном часовом поясе для ваших сравнений.

1 голос
/ 23 марта 2009

Приблизительно будет:

        DateTime bd = new DateTime(1999, 1, 2);

        TimeSpan age = DateTime.Now.Subtract(bd);
        Console.WriteLine(age.TotalDays / 365.25);
0 голосов
/ 23 марта 2009

сколько ошибок допускается в дробной части? точный возраст будет

31 год, 10 дней, 3 часа и т. Д. В зависимости от требуемой точности.

0 голосов
/ 23 марта 2009

Вы можете сделать это:

Console.WriteLine(DateTime.Now.Date.Subtract(new DateTime(1980, 8, 1)).TotalDays / 365.25);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...