比较java中的日期冲突

时间:2016-11-03 23:03:24

标签: java

我与startDateendDate

有两个约会

从方法参数我得到newStartDate和newEndDate

现在我需要检查newStartDatenewEndDate之间是不是startDateendDate

例如:

start date = 11/03/2016
end date = 11/15/2016


newStartDate = 11/16/2016
newEndDate = 11/23/2016
(^^^This one should return true)

newStartDate = 11/01/2016
newEndDate = 11/02/2016
(^^^This one should return true)

newStartDate = 11/04/2016
newEndDate = 11/12/2016
(^^^This one should return false)

newStartDate = 11/01/2016
newEndDate = 11/05/2016
(^^^This one should return false)

newStartDate = 11/12/2016
newEndDate = 11/22/2016
(^^^This one should return false)  

newStartDate = 11/01/2016
newEndDate = 11/24/2016
(^^^This one should return false)

newStartDate = 11/01/2016
newEndDate = 11/03/2016
(^^^This one should return false) 

请帮我写一下这种逻辑的java代码。

1 个答案:

答案 0 :(得分:2)

比较日期的最简单方法是首先将它们转换为Date对象。这可以按如下方式完成:

DateFormat dateFormat = new SimpleDateFormat("DD/MM/YYYY");
Date startDate = dateFormat.parse("11/03/2016");
Date endDate = dateFormat.parse("11/23/2016");

Date变量中包含所有日期后,您对重叠的检查非常简单:

boolean overlap = newStar.compareTo(endDate) <= 0 && newEnd.compareTo(startDate) >= 0;

在您的问题中,如果在同一日期结束或开始的范围被视为重叠,则不清楚。如果不是,则可以更改,然后使用<>而不是<=>=

<强>更新

正如@BasilBorque指出的那样,上面的类已被java.time中的类取代。现在更好的解决方案是:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/DD/YYYY");
LocalDate startDate = LocalDate.parse("11/03/2016", formatter);
LocalDate endDate = LocalDate.parse("11/23/2016", formatter);