如何比较两个日期时间是相同还是至少重叠?如何比较日期和时间?
例如,假设我们有以下两套启动和停止时间:
开始时间:2011-07-21上午9:00停止时间:2011-07-21 10:00
开始时间:2011-07-21上午9:05停止时间:2011-07-21 10:30
的日期时间不完全匹配,所以我不能做直相等测试。但是,就我的目的而言,日期时间重叠足以视为匹配,那么如何测试此类重叠?
如何比较两个日期时间是相同还是至少重叠?如何比较日期和时间?
例如,假设我们有以下两套启动和停止时间:
开始时间:2011-07-21上午9:00停止时间:2011-07-21 10:00
开始时间:2011-07-21上午9:05停止时间:2011-07-21 10:30
的日期时间不完全匹配,所以我不能做直相等测试。但是,就我的目的而言,日期时间重叠足以视为匹配,那么如何测试此类重叠?
使用JODA或写DATERANGE类自己来封装逻辑。
我猜你需要一个算法来做到这一点,而不是java语法。
您可以从第一次停止时间减去第二个开始时间,并根据可接受的重叠设置差异阈值。
如果你想这样做的纯Java,使用Calendar
对象和compareTo() == 0
对于重叠,集秒,分钟等为0,直到你得到想要的“精确”。
或者(为了获得更精细的粒度精度),将两者都转换为long
并使用Math.abs(t1 - t2)
来获得以毫秒为单位的差值。
看看下面的示例代码(希望您不介意不推荐使用的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