C# 从datetime字段计算年龄,包括时间跨度

C# 从datetime字段计算年龄,包括时间跨度,c#,datetime,C#,Datetime,我正在尝试调用此函数,该函数应返回57的年龄,但如果我今天在2016年10月18日运行它,则返回58 DateTime myDate3test = Convert.ToDateTime("1958-10-17 13:45:59.473"); Console.WriteLine(CalculateAge(myDate3test)); //this should return 57 if run today October 18, 2016 since the person is n

我正在尝试调用此函数,该函数应返回
57
的年龄,但如果我今天在2016年10月18日运行它,则返回
58

    DateTime myDate3test = Convert.ToDateTime("1958-10-17 13:45:59.473");
    Console.WriteLine(CalculateAge(myDate3test)); //this should return 57 if run today October 18, 2016 since the person is not yet 58


    public static string CalculateAge(DateTime dtDateOfBirth)
    {
        int age = 0;
        DateTime dtNow = DateTime.Now;
        string measurement = string.Empty;

        if (DateTime.Compare(dtNow, dtDateOfBirth) == 1)
        {
            TimeSpan tsAge = dtNow.Subtract(dtDateOfBirth);
            DateTime dtAge = new DateTime(tsAge.Ticks);



            var vNowDate = Convert.ToInt32(dtNow.ToString("yyyyMMdd"));
            var vBirthdate = Convert.ToInt32(dtDateOfBirth.ToString("yyyyMMdd"));
            double diff = (vNowDate - vBirthdate) / 10000;
            age = Convert.ToInt32(Math.Truncate(diff));

            measurement = " year";

            if (age == 0) // patient is not 1 year old yet
            {
                age = dtAge.Month - 1;
                measurement = " month";

                if (age == 0) // patient is not 1 month old yet
                {
                    age = dtAge.Day - 1;
                    measurement = " day";
                }
            }
            if (age > 1)
            {
                measurement += "s";
            }
        }
        else
        {
            // Future date!!!
            measurement = " Unable to calculate age";
            age = -1;
        }

        return age.ToString() + measurement;
    }
非常感谢您的帮助。

您的意见非常重要 所以58年的答案是正确的。 您的输入是 所以58年的答案是正确的。

你好,索纳。我尝试了你提到的链接,但是其中的代码在传递我传递的数据时也返回了58,我传递的数据是DateTime myDate3test=Convert.ToDateTime(“1958-10-17 13:45:59.473”);也许这会对你有所帮助。谢谢你的回复,艾美,拉斐尔,尝试了所有这些链接,当我经过1958-10-17 13:45:59.473Hi Soner这个日期时,我仍然得到了58而不是57的答案。我尝试了你提到的链接,但是其中的代码在传递我传递的数据时也返回了58,我传递的数据是DateTime myDate3test=Convert.ToDateTime(“1958-10-17 13:45:59.473”);也许这会对你有所帮助。谢谢你的回复艾美,拉斐尔,尝试了所有这些链接,当我通过这个日期时,我仍然得到58而不是57的回复时间1958-10-17 13:45:59.473我是伊姆蒂亚兹谢谢你的回复。事实上,如果考虑到日期1958-10-17 13:45:59.473的时间跨度,我们试图编写一个函数来计算,因为这是业务的一部分requirement@TuSabesTuSabes事实上,这个人还是58岁。时间不是这样的。。如果你想让这个人57岁,加上一天。你可以为时间制定不同的逻辑。首先计算年龄,然后进行时间比较,如果未达到时间,则扣除一天。谢谢回复。事实上,如果考虑到日期1958-10-17 13:45:59.473的时间跨度,我们试图编写一个函数来计算,因为这是业务的一部分requirement@TuSabesTuSabes事实上,这个人还是58岁。时间不是这样的。。如果你想让这个人57岁,加上一天。你可以为时间制定不同的逻辑。首先计算年龄,然后进行时间比较,如果尚未达到时间,则扣除一天