C# 计算两个日期之间的差值,并以年为单位计算值?

C# 计算两个日期之间的差值,并以年为单位计算值?,c#,datetime,timespan,C#,Datetime,Timespan,可能重复: 我想基本上计算员工的年龄,所以我们有每个员工的DOB,以此类推 C方我想做这样的事情- int age=Convert.Int32(DateTime.Now-DOB); 我可以用天数来计算年龄……但我想知道是否有一些东西可以直接用来计算年数。是否要计算员工的年龄(以年为单位)?然后您可以使用此代码段(从): 如果没有,请说明。我很难理解你想要什么。Math.Round(DateTime.Now.Subtract(DOB.TotalDays/365.0) 正如所指出的,这是行不通的

可能重复:

我想基本上计算员工的年龄,所以我们有每个员工的DOB,以此类推 C方我想做这样的事情-

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

我可以用天数来计算年龄……但我想知道是否有一些东西可以直接用来计算年数。

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

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

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)
天哪,这些天我的基础数学很烂…

他们在网站上有:

   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;
  }
publicstaticintcalculateage(日期时间出生日期)
{
int YearsPassed=DateTime.Now.Year-生日.Year;
//我们今年是在出生日期之前吗?如果是的话,从组合中减去一年
if(DateTime.Now.Month
减去两个
DateTime
得到一个返回值。不幸的是,它给你的最大单位是天

虽然不精确,但您可以对其进行估计,如下所示:

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

//assume 365.25 days per year
decimal years = days / 365.25m;
编辑:哎呀,TotalDays是双精度的,Days是整数

(DateTime.Now - DOB).TotalDays/365
从另一个DateTime结构中减去一个DateTime结构将得到一个TimeSpan结构,其属性为TotalDays。。。然后只需除以365

private static Int32 CalculateAge(DateTime DOB)
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }
{ 日期时间温度=DOB; Int32年龄=0; 而((temp=temp.AddYears(1))
Ya这就是我想做的…很抱歉没有很好地表达出来..嗨,你为什么要减少第三行中的年龄?@WTFZane因为如果那一年的日期大于当前一年的日期,那么他们还不是那个年龄。e、 g.DOB=30/5/2000。今天=30/4/2010。年龄=10岁。然后调整到9岁,因为他们只有9岁。注意,对于在2月29日出生的人来说,这是失败的,因为在某些国家(如英国),非闰年的生日是3月1日(即“2月28日后的一天”)。这是因为
AddYears()
返回任何非闰年的2月28日(如果出生日期输入是有效的2月29日)。一个理想的解决方案是将国家作为一个参数:)这显然只适用于较短的跨度,但如果没有人会超过150岁……是的,它不起作用。Timespan需要一个“TotalYears”属性:-)很抱歉,这里没有考虑闰年,因此它将在短至1年的时间内返回不正确的结果。回答不错!我想知道365.25的除法。为什么不仅仅是365.0。我在其他话题中也发现了这一点,不知道你是否能给我一些启发。25是闰年。我还将它改为使用天数而不是总天数。TotalDays是一个双精度值,不是整数。因为我们不关心部分天数……这并不完全准确。我们并不总是每四年有一个闰年。@matt dot net因为唯一重要的时间是115岁以上的人,我相信它在大多数情况下都会起作用。除以365不能处理闰年,实际上除以365.25也不能准确地处理闰年。这实际上更接近于一个可行的解决方案,但它是由一天。在你的例子中应该是
28/1/1981=0不是每年都有365天…这应该是公认的答案。又好又简单
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }