2016-11-03 55 views
-1

我有我startDate两个日期和endDate比较日期冲突

从方法的参数我得到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代码。

+0

请在发布前彻底搜索Stack Overflow。 –

回答

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); 
+0

这是老派的建议。这些都是麻烦的旧日期时间类,现在已经成为传统,被java.time类取代。此外,当代码要求仅限日期值时,此代码使用日期 - 时间值。 –