52

可能重复:
如何在 C# 中计算某人的年龄?

我想基本上计算员工的年龄 - 所以我们为每个员工都有 DOB,所以在 C# 方面我想做这样的事情 -

int age=Convert.Int32(DateTime.Now-DOB);

我可以使用天数并操纵然后得到年龄......但我想知道是否有什么东西可以直接用来得到年数。

4

6 回答 6

91

您要计算员工的年龄吗?然后你可以使用这个片段(来自Calculate age in C#):

DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (bday > now.AddYears(-age)) age--;

如果不是,请说明。我很难理解你想要什么。

于 2010-06-30T20:08:51.700 回答
19

减去两个DateTime会给你一个TimeSpan回报。不幸的是,它给你的最大单位是天。

虽然不准确,但您可以估计它,如下所示:

int days = (DateTime.Today - DOB).Days;

//assume 365.25 days per year
decimal years = days / 365.25m;

编辑:哎呀,TotalDays 是一个双精度数,Days 是一个整数。

于 2010-06-30T20:11:20.267 回答
12

这个网站上,他们有:

   public static int CalculateAge(DateTime BirthDate)
   {
        int YearsPassed = DateTime.Now.Year - BirthDate.Year;
        // Are we before the birth date this year? If so subtract one year from the mix
        if (DateTime.Now.Month < BirthDate.Month || (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
        {
            YearsPassed--;
        }
        return YearsPassed;
  }
于 2010-06-30T20:10:24.020 回答
4
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }
于 2010-06-30T21:07:33.707 回答
0

Math.Round(DateTime.Now.Subtract(DOB).TotalDays/365.0)

正如所指出的,这行不通。你必须这样做:

(Int32)Math.Round((span.TotalDays - (span.TotalDays % 365.0)) / 365.0);

在这一点上,另一个解决方案不那么复杂,并且在更大的跨度上继续保持准确。

编辑2,怎么样:

Math.Floor(DateTime.Now.Subtract(DOB).TotalDays/365.0)

天啊,这些天我的基础数学很烂……

于 2010-06-30T20:09:08.530 回答
-4
(DateTime.Now - DOB).TotalDays/365

从另一个 DateTime 结构中减去一个 DateTime 结构会给你一个 TimeSpan 结构,它具有属性 TotalDays... 然后除以 365

于 2010-06-30T20:15:37.747 回答