1
  • 我有两个日期范围, (start1,end1):::>>date1 && (start2,end2):::>>date2 。
  • 我想检查这两个日期是否重叠。

  • 我的流程图我假设“<>=”运算符对比较有效

    boolean isOverLaped(Date start1,Date end1,Date start2,Date end2) {
        if (start1>=end2 && end2>=start2 && start2>=end2) {
            return false;
        } else {
            return true;
        }
    }
    
  • 任何建议将不胜感激。
4

4 回答 4

12

您可以为此使用Joda-Time

它提供了Interval指定开始和结束时刻的类,并且可以检查与overlaps(Interval).

就像是

DateTime now = DateTime.now();

DateTime start1 = now;
DateTime end1 = now.plusMinutes(1);

DateTime start2 = now.plusSeconds(50);
DateTime end2 = now.plusMinutes(2);

Interval interval = new Interval( start1, end1 );
Interval interval2 = new Interval( start2, end2 );

System.out.println( interval.overlaps( interval2 ) );

印刷

true

因为第一个间隔的结束位于第二个间隔的开始和结束之间。

于 2013-09-21T22:13:18.003 回答
2
boolean overlap(Date start1, Date end1, Date start2, Date end2){
    return start1.getTime() <= end2.getTime() && start2.getTime() <= end1.getTime(); 
}
于 2013-09-21T22:07:36.100 回答
0

你有两个区间,i1 和 i2。有六种情况可以说明区间如何在时间上相关(至少在牛顿世界观中),但只有两种是重要的:如果 i1 完全在 i2 之前或 i1 完全在 i2 之后;否则两个区间是重叠的(其他四种情况是 i1 包含 i2,i2 包含 i1,i1 包含 i2 的开头,i1 包含 i2 的结尾)。假设 i1 和 i2 是具有日期字段 beginTime 和 endTime 的 Interval 类型。然后函数是(注意,这里的假设是,如果 i1 在 i2 结束的同时开始,反之亦然,我们不认为重叠,我们假设给定间隔 endTime.before(beginTime) 为假) :

boolean isOverlapped(Interval i1, Interval i2) {
    return i1.endTime.before(i2.beginTime) || i1.beginTime.after(i2.endTime);
}

在原始问题中,您指定 DateTime 而不是 Date。在 java 中,Date 有日期和时间。这与 sql 形成对比,其中 Date 没有时间元素,而 DateTime 有。这是我在多年只使用 java 之后第一次开始使用 sql 时偶然发现的一个困惑点。无论如何,我希望这个解释是有帮助的。

于 2014-08-17T15:58:50.820 回答
0
    //the inserted interval date is start with fromDate1 and end with toDate1
    //the date you want to compare with start with fromDate2 and end with toDate2

if ((int)(toDate1 - fromDate2).TotalDays < 0 )
        { return true;}
else
{    
 Response.Write("<script>alert('there is an intersection between the inserted date interval and the one you want to compare with')</script>");
            return false;
        }

if ((int)(fromDate1 - toDate2).TotalDays > 0 )
        { return true;}
else
{    
 Response.Write("<script>alert('there is an intersection between the inserted date interval and the one you want to compare with')</script>");
            return false;
        }
于 2014-01-16T12:43:37.967 回答