【问题标题】:Calculating age from datetime field including time span [duplicate]从包括时间跨度的日期时间字段计算年龄
【发布时间】:2017-02-28 02:05:27
【问题描述】:

我正在尝试调用这个函数,它应该返回 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;
    }

感谢任何帮助。

【问题讨论】:

标签: c# datetime


【解决方案1】:

您的输入是 1958-10-17 所以 58 年的答案是正确的。 http://www.calculator.net/age-calculator.html?today=10%2F17%2F1958&ageat=10%2F18%2F2016&x=74&y=7

【讨论】:

  • 嗨,M Imtiaz 感谢您的回复。实际上,如果考虑到日期 1958-10-17 13:45:59.473 的时间跨度,这个人仍然是 57,我们正在尝试编写一个函数来计算它,因为这是业务需求的一部分
  • @TuSabesTuSabes 其实这个人还是 58 岁。这不是时间的运作方式。如果你想让这个人 57 岁,加一天。
  • 你可以为时间制定单独的逻辑。先计算年龄再进行时间比较,如果还没有到时间就扣一天
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 2010-10-14
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多