【问题标题】:Two dates within a year of each other一年内的两个日期
【发布时间】:2009-05-13 20:40:10
【问题描述】:

我有两个日期,如何检查两个日期是否不超过一年?

简短的问题! :-)

【问题讨论】:

  • @OP:你的意思是“彼此相隔一年”还是“同一年”?
  • 请更具体地说明您想要什么。您可以让这两天相隔不超过 365 天,也可以让这两个日期在同一年(简单案例)
  • 我认为这是一个程序员第一次在同一日历年与两个不同的女人约会的荣耀帖子 =/

标签: c# asp.net datetime


【解决方案1】:
if (Math.Abs((d1 - d2).TotalDays) < 365)

编辑:这应该更好地考虑闰年。

if ( d1 <= d2 && d1.AddYears(1) >= d2 || d2 < d1 && d2.AddYears(1) > d1)

更新:
我更喜欢@JDunkerley 的解决方案:

if (d1 < d2 ? d2 < d1.AddYears(1) : d1 < d2.AddYears(1)) 

【讨论】:

  • 如果我想比较 2008 年 1 月 1 日和 2008 年 12 月 31 日,该怎么办?这个表情就是在说谎!
  • 那你有什么推荐的,pesaa?
  • @pestaa:这是真的。关于闰年是天真的。我最初使用 .TotalYears 然后意识到 TimeSpan 没有。稍后我会完成一些更完整的内容。
  • 幻数警告!闰年呢? :)
  • @pestaa:您可以通过以下方式解决这种情况: if (d1
【解决方案2】:

我举个小例子:

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

【讨论】:

    【解决方案3】:
    TimeSpan ts = Date1.Subtract(Date2);
    
    if(ts.Days > 365)
    {
    // Over a year.
    }
    

    【讨论】:

      【解决方案4】:

      这取决于日期格式。

      • 如果您有两个时间戳,您可以计算它们之间的差异。
      • 如果您有两个已知格式的特定日期,您只需将年份属性作为字符串进行比较。

      【讨论】:

        【解决方案5】:

        如果它们都在 DateTime 结构中,那么您只需将两者相减即可得到 Timespan 结构。 Timespan 结构有一个Days 属性,您可以查看它。

        所以你会有类似的东西:

        if(Math.Abs((date1 - date2).Days) <= 365) ...
        

        【讨论】:

          【解决方案6】:

          如有必要,交换 t1 和 t2 以使 t1

          if(t1.AddYears(1) >= t2) {
              // t1 is within a year of t2
              return true;
          } else {
              // t1 is not within a year of t2
              return false;
          }
          

          【讨论】:

            【解决方案7】:

            这和"how do I calculate someone's age"是同一个问题。

            公然从那里窃取答案并对其进行修改以供使用:

            public static bool DatesAreWithinOneYear(DateTime date1, DateTime date2)
            {
                DateTime startDate = date2 > date1 ? date1 : date2;
                DateTime endDate = date2 > date1 ? date2 : date1;
            
                int years = endDate.Year - startDate.Year;
                if (endDate < startDate.AddYears(years))
                {
                    years--;
                }
                return years < 1;
            }
            

            【讨论】:

              【解决方案8】:
              if (year(date1) == year(date2))
              {
                 //true
              }
              else
              {
                 //false
              }
              

              【讨论】:

              • 这将回答问题标题中提出的问题。如果您正在寻找可以确保两个日期在一年内的东西,那么乔尔或其他答案会更合适。这只是检查年份是否相同。
              • 对不起,如果我误导了我的问题。乔尔的回答成功了。感谢您的努力。
              • meep:没关系。尽管在我明确表示另一个可能更有用之后,对它的大量反对是非常可疑的。哦,好吧。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多