可以用 C# 中的用户输入计算年龄,但不知道为什么会这样

Ilh*_*han 3 c# calculator

因此,我使用了在此处不同用户提出的问题上找到的解决方案,链接:如何在 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();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Mar*_*tin 5

您问的是这条线是如何工作的:

if (myDate.Date > today.AddYears(-age)) age--;
Run Code Online (Sandbox Code Playgroud)

年数是通过从现在的年份减去出生年份的年份来计算的。例如,如果您的出生日期是 1979 年 5 月 15 日,现在是 2020 年,则结果为:

age = 2020 - 1979 = 41
Run Code Online (Sandbox Code Playgroud)

然而,如果这个人的出生日期是在今天之后,那么他们还不是41岁,他们仍然是40岁。

就该if声明而言,如果他们的出生日期(月份和日期)在今天之后,则减去一年即可age得出正确的年龄(在我的示例中为 40 岁)。

逻辑并不那么简洁,但本质上它是这样说的:

  • 从今天的日期开始计算年龄(例如:15/05/1979 = 41 岁,12/01/2020 - 41 岁 = 12/01/1979)
  • DOB 是在这个值之后吗?(是 1979 年 5 月 15 日 1979 年 1 月 12 日之后)
  • 如果是,则年龄减 1(例如:41 - 1 = 40 岁)