2011-07-21 73 views
3

如何比较两个日期时间是相同还是至少重叠?如何比较日期和时间?

例如,假设我们有以下两套启动和停止时间:

开始时间:2011-07-21上午9:00停止时间:2011-07-21 10:00

开始时间:2011-07-21上午9:05停止时间:2011-07-21 10:30

的日期时间不完全匹配,所以我不能做直相等测试。但是,就我的目的而言,日期时间重叠足以视为匹配,那么如何测试此类重叠?

回答

2

我强烈建议使用JodaTime及其overlap方法。

从javadoc,它不仅会告诉你它是否两个区间重叠。但它会告诉你重叠区间是多少。

返回: 的重叠区间,空,如果没有重叠

0

使用JODA或写DATERANGE类自己来封装逻辑。

0

我猜你需要一个算法来做到这一点,而不是java语法。

您可以从第一次停止时间减去第二个开始时间,并根据可接受的重叠设置差异阈值。

0

如果你想这样做的纯Java,使用Calendar对象和compareTo() == 0

对于重叠,集秒,分钟等为0,直到你得到想要的“精确”。

或者(为了获得更精细的粒度精度),将两者都转换为long并使用Math.abs(t1 - t2)来获得以毫秒为单位的差值。

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