【问题标题】:How to calculate the number of years between 2 dates?如何计算两个日期之间的年数?
【发布时间】:2012-01-06 08:06:05
【问题描述】:

我想比较 2 个日期以确认它们之间的年数是 >= 18。例如,如果我的 2 个日期是 03-12-201103-12-1983,那么这应该通过验证,但是,如果我的 2 个日期是 03-12-201103-12-1995,那么这应该验证失败。

谁能帮帮我?

【问题讨论】:

  • DateTime 类有几个方便的方法,你试过了吗?

标签: c#


【解决方案1】:

【讨论】:

    【解决方案2】:

    使用TimeSpan 结构。

    TimeSpan span= dateSecond - dateFirst;
    int days=span.Days;
    //or
    int years = (int) (span.Days / 365.25);
    

    【讨论】:

    • OP 寻找的是几年,而不是几天
    【解决方案3】:

    希望这就是你要找的东西

    public bool CheckDate(DateTime date1, DateTime date2)
    {
        return date1.AddYears(-18) < date2;
    }
    

    【讨论】:

    • OP 寻找的是几年,而不是几天。他应该改用 AddYears
    【解决方案4】:

    创建两个 DateTime 对象并将它们相互减去。 结果是一个 DateTime 对象:

    DateTime dt = new DateTime(2011, 12, 03);
    DateTime dt2 = new DateTime(1983, 12, 03);
    DateTime dt3 = dt - dt2;
    

    现在您可以查看dt3.Year 之间的年数

    【讨论】:

    • 你不是说 TimeSpan dt3 吗?
    • TimeSpan 没有年份属性。
    【解决方案5】:

    使用时间跨度:

    TimeSpan day = 03-12-2011 - 03-12-1983;
                    double year = day.TotalDays / 365.25;
    
                    if (year > 18)
                    {
    
                    }
    

    也许你应该使用 DateTime.Now 而不是 03-12-2011

    【讨论】:

      【解决方案6】:

      我重新调整了您的问题标题和描述,使其更加清晰。根据我从您的原始帖子中收集到的信息,您正在寻找 年龄验证 功能。这是我会做的:

      function VerifyAge(DateTime dateOfBirth)
      {
          DateTime now = DateTime.Today; 
          int age = now.Year - dateOfBirth.Year;
          if (now.Month < dateOfBirth.Month || (now.Month == dateOfBirth.Month && now.Day < dateOfBirth.Day)) 
              age--;
          return age >= 18; 
      }
      

      【讨论】:

        【解决方案7】:

        这是一个检查年龄是否超过18岁的方法:

            private bool IsMoreThan18(DateTime from, DateTime to)
            {
                int age = to.Year - from.Year;
                if (from > to.AddYears(-age)) age--;
                return age >= 18;
            }
        

        【讨论】:

          【解决方案8】:
          DateTime zeroTime = new DateTime(1, 1, 1);
          
          DateTime a = new DateTime(2008, 1, 1);
          DateTime b = new DateTime(2016, 1, 1);
          
          TimeSpan span = b - a;
          // because we start at year 1 for the Gregorian 
          // calendar, we must subtract a year here.
          int years = (zeroTime + span).Year - 1; 
          
          Console.WriteLine("Years elapsed: " + years); 
          

          引用Link

          【讨论】:

            猜你喜欢
            • 2018-03-04
            • 1970-01-01
            • 2012-12-13
            • 1970-01-01
            • 2022-01-14
            • 2021-07-08
            • 1970-01-01
            • 2018-11-18
            相关资源
            最近更新 更多