Можно рассчитать возраст с помощью пользовательского ввода в C#, но не знаю, почему это работает - PullRequest
2 голосов
/ 12 января 2020

Итак, я использовал решение, найденное по вопросу от другого пользователя, по ссылке: Как рассчитать чей-то возраст в C#? , где DOB был жестко закодирован, я добавил код, чтобы взять в пользовательском вводе из консоли, чтобы затем вычислить возраст, однако я не знаю, почему оператор if дает правильный результат, без него он вычисляет возраст, которым вы будете в этом году, а не фактический возраст.

var today = DateTime.Today;
Console.WriteLine("Type in your D.O.B in DD-MM-YYYY format:");
var Bday = Console.ReadLine();
var myDate = Convert.ToDateTime(Bday);
var age = today.Year - myDate.Year;
if (myDate.Date > today.AddYears(-age)) age--;
Console.WriteLine($"You are {age} years old");
Console.ReadLine();

Любая помощь будет принята с благодарностью!

1 Ответ

4 голосов
/ 12 января 2020

Вы спрашиваете, как работает эта строка:

if (myDate.Date > today.AddYears(-age)) age--;

Количество лет было рассчитано путем вычитания года из DOB из года сейчас . Например, если ваш DOB был 15/05/1979, а сейчас это 2020, это даст:

age = 2020 - 1979 = 41

Однако, если DOB этого человека был после сегодняшнего дня, он не был бы 41 все же они все равно будут равны 40.

В случае заявления if, если дата их рождения (месяц и день) после сегодняшнего дня, вычитается один год от age, чтобы указать правильный возраст (в моем примере это было бы 40 лет).

Лог c не так лаконичен, как мог бы быть, но по сути он говорит:

  • Возьмите расчетный возраст в годах от сегодняшней даты (пример: 15/05/1979 = 41 год, 12/01/2020 - 41 год = 12/01/1979)
  • Является ли DOB после это значение? (15/05/1979 ПОСЛЕ 12/01/1979)
  • Если да, вычтите 1 из возраста (пример: 41 - 1 = 40 лет)
...