2011-04-18 43 views
1

我有4个日期startDateendDateperiodStartDateperiodEndDate检查在研磨日期

我需要一个方法,如果期间因startDateendDate重叠由periodStartDate和表示的期间表示,以返回true periodEndDate。这是C#3.5所以不能使用元组。像建议的链接

我的大脑似乎不工作,所以有人请帮助我。

谢谢!

+0

重复? http://stackoverflow.com/questions/4910617/multiple-date-range-comparison-for-overlap-how-to-do-it-efficiently – Dve 2011-04-18 15:34:03

+0

你如何解释它给人类,而不使用单词“之间” ?正是这样写下来! ;-) – Achim 2011-04-18 15:35:02

+0

您没有找到任何答案有帮助吗? – Niklas 2011-04-19 07:48:02

回答

1

假设结束日期总是比开始日期相同或更高:

return startDate <= periodEndDate; 
+0

什么?如果startDate Zecc 2011-04-18 15:46:10

+0

@Zecc - 如果逻辑允许结束日期在开始日期之前出现,这似乎相当奇怪。 – ChaosPandion 2011-04-18 15:50:29

+0

期间2011-01-01至2011-02-01,日期2010-01-01至2010-02-01。您的测试将返回true,但周期不会重叠。 – mathieu 2011-04-18 16:06:42

1

你只需要检查的结束日期是periodStartDate之前,或者如果起始日期是periodEndDate后。
(假设的startDate <结束日期和periodStartDate < periodEndDate)

在代码

if (endDate < periodStartDate || periodEndDate < startDate) return false; 
else return true; 

或在视觉=)

startDate -------- endDateperiodStartDate -------- periodEndDate

periodStartDate -------- periodEndDatestartDate -------- endDate

+0

这在负数中是正确的:如果endDate <= periodStartDate,则{start-> end}在{periodStart-> periodEnd}之前;如果start> = periodStart,则{start-> end}出现在{periodStart-> periodEnd}之后。在所有其他情况下,它们重叠。 – Zecc 2011-04-18 15:53:25

+0

我想这可能会被认为日期是否重叠,如果他们是平等=) – Niklas 2011-04-18 15:55:54

+0

其实,我误解了这个问题,我会纠正它。 – Niklas 2011-04-19 14:51:29

3
if (startDate<periodStartDate)//start date is older 
{ 

    if (periodStartDate < endDate) //if end date is later than start of period 
     return true; 
    else return false; // 
} 
else //period start is older 
{ 
    if (periodEndDate < startDate) //period ended before startdate 
     return false; 
    else 
     return true; 
} 

只是需要关心你想要 “<”,并在 “< =”

编辑(更优雅的解决方案):

if (end1<start2) || (end2<start1) return false 
else return true; 
1

我想这应该做你想要什么。

{ 
      if (startDate < periodStartDate) 
      { 
       if (endDate>=periodStartDate) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       }        
      } 
      else 
      { 
       if (startDate <= periodEndDate) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 

即使一个范围完全包含另一个范围,这将捕获重叠。