一年内相隔两个日期

3

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

简短的问题! :-)


1
@OP:你是指“在一年内”还是“在同一年内”? - belgariontheking
1
请更具体地说明您想要的是什么。您可以让这两天之间的间隔不超过365天,或者让这两个日期在同一年内(简单情况)。 - schnaader
5
我以为这是一个程序员自夸的帖子,因为他第一次在同一年约会了两个不同的女人。=/ - sclarson
8个回答

20
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)) 

1
如果我想比较2008年1月1日和2008年12月31日怎么办?这个表达式会告诉我一个谎言! - pestaa
@pestaa:这是真的。它对闰年有些天真。我最初使用了.TotalYears,然后意识到TimeSpan没有那个。我马上会有更完整的东西。 - Joel Coehoorn
1
魔数警告!闰年怎么办? :) - patjbs
考虑闰年。 - pestaa
4
如果(d1 < d2 ? d2 < d1.AddYears(1) : d1 < d2.AddYears(1))的话,你可以规避那种情况。 - JDunkerley
显示剩余8条评论

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 );

0
TimeSpan ts = Date1.Subtract(Date2);

if(ts.Days > 365)
{
// Over a year.
}

0

这个问题与"如何计算某人的年龄"相同。

我直接从那里抄袭答案并进行修改以供使用:

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;
}

0
如有必要,交换t1和t2,以使t1 <= t2。
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;
}

0

这取决于日期格式。

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

0
如果它们都是DateTime结构,那么您可以将两者相减以获得一个Timespan结构。Timespan结构具有一个Days属性,您可以查看它。
因此,您将拥有类似以下的内容:
if(Math.Abs((date1 - date2).Days) <= 365) ...

-2
if (year(date1) == year(date2))
{
   //true
}
else
{
   //false
}

这将回答问题标题中提出的问题。如果您正在寻找确保两个日期在一年时间跨度内的内容,则Joel或其他答案可能更合适。这只是检查年份是否相同。 - TheTXI
抱歉如果我提出了错误的问题。Joel的回答解决了我的问题。感谢你的努力。 - janhartmann
meep: 没关系。虽然我明确表示另一个可能更有用,但之后被大量的踩感觉相当不好。无论如何。 - TheTXI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接