2016-11-03 72 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類取代。此外,當代碼要求僅限日期值時,此代碼使用日期 - 時間值。 –