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

Can calculate age with user input in C#, but don't know why it works

所以我使用了一个解决方案,该解决方案是在此处来自不同用户的问题上找到的,link:How do I calculate someone's age in 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();

任何帮助将不胜感激!

你问的是这条线路的工作原理:

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

年数是通过 DOB 减去年份 now 得到的。例如,如果您的 DOB 是 1979 年 5 月 15 日,现在是 2020 年,这将给出:

age = 2020 - 1979 = 41

但是,如果这个人的 DOB 在今天之后,他们就不会是 41 ,他们仍然是 40。

if语句的情况下,如果日期他们的出生日期(月份和日期)在今天之后,则从age 给出正确的年龄(在我的例子中是 40 岁)。

逻辑并不尽如人意,但本质上是这样说的:

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