我与startDate
和endDate
从方法参数我得到newStartDate和newEndDate
现在我需要检查newStartDate
和newEndDate
之间是不是startDate
和endDate
例如:
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代码。
答案 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);