如何比较日期和时间?

时间:2011-07-21 15:36:33

标签: java

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

例如,假设我们有以下两组开始和结束时间:

  

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

     

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

日期时间不完全匹配,所以我不能进行直接的相等测试。但是,就我的目的而言,日期时间重叠足以被视为匹配,我该如何测试这种类型的重叠呢?

5 个答案:

答案 0 :(得分:2)

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

从javadoc开始,它不仅会告诉您两个间隔是否重叠。但它告诉你重叠间隔是什么。

  

返回:       重叠间隔,如果没有重叠则为null

答案 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