关于C#:计算两个日期之间的差异并获得以年为单位的值?

Calculate the difference between two dates and get the value in years?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I calculate someone’s age in C#?

我想基本上计算雇员的年龄-所以我们每个雇员都有出生日期,以此类推。C面我想做这样的事-

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

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


是否要计算员工的年龄(以年为单位)?然后您可以使用这段代码(从C中计算年龄):

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

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


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

虽然不准确,但您可以这样估计:

1
2
3
4
int days = (DateTime.Today - DOB).Days;

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

编辑:哎呀,totaldays是一个双精度数,days是一个整数。


在这个网站上,他们有:

1
2
3
4
5
6
7
8
9
10
   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;
  }

1
2
3
4
5
6
7
8
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }


math.round(datetime.now.subtract(dob).totaldays/365.0)

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

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

在这一点上,另一个解决方案就不那么复杂了,而且在更大的跨度上仍然是精确的。

编辑2,如何:

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

天哪,我这几天在基础数学方面很差劲…


1
(DateTime.Now - DOB).TotalDays/365

从另一个datetime结构中减去datetime结构将为您提供一个具有totaldays属性的TimeSpan结构…然后除以365