如何比较两个日期时间是相同还是至少重叠?
例如,假设我们有以下两组开始和结束时间:
开始时间:2011-07-21上午9:00停止时间:2011-07-21上午10:00
开始时间:2011-07-21 9:05 am停止时间:2011-07-21 10:30 am
日期时间不完全匹配,所以我不能进行直接的相等测试。但是,就我的目的而言,日期时间重叠足以被视为匹配,我该如何测试这种类型的重叠呢?
答案 0 :(得分:2)
答案 1 :(得分:0)
使用JODA或编写自己的DateRange类来封装逻辑。
答案 2 :(得分:0)
我猜你需要一个算法而不是java语法。
您可以从第一个停止时间中减去第二个开始时间,并根据可接受的重叠对差异设置一个阈值。
答案 3 :(得分:0)
如果您想在纯Java中执行此操作,请使用Calendar
对象和compareTo() == 0
对于重叠,将秒,分钟等设置为0,直到获得所需的“精度”。
或者(对于更细粒度的精度),将两者都转换为long
并使用Math.abs( t1 - t2 )
来获得以毫秒为单位的差异。
答案 4 :(得分:0)
查看以下示例代码(希望您不介意弃用的API,因为这只是一个示例)。
public class DateOverlapTest {
public static void main(final String... args) {
Date start1 = new Date(2011, 6, 21, 9, 0);
Date stop1 = new Date(2011, 6, 21, 10, 0);
Date start2 = new Date(2011, 6, 21, 9, 5);
Date stop2 = new Date(2011, 6, 21, 10, 30);
System.out.println("Start1: " + start1);
System.out.println("Stop1 : " + stop1);
System.out.println("Start2: " + start2);
System.out.println("Stop2 : " + stop2);
// start2 has to be before or equal stop1 and
// stop2 has to be after or equal start1
boolean overlap = start2.compareTo(stop1) <= 0
&& stop2.compareTo(start1) >= 0;
System.out.println("Overlaps: " + overlap);
}
}
输出是:
Start1: Fri Jul 21 09:00:00 CEST 3911
Stop1 : Fri Jul 21 10:00:00 CEST 3911
Start2: Fri Jul 21 09:05:00 CEST 3911
Stop2 : Fri Jul 21 10:30:00 CEST 3911
Overlaps: true