2012-11-27 69 views
21

我正在使用Joda時間2.1庫。Joda時間中的包含日期範圍檢查

我寫了一個方法來比較給定日期是否在日期範圍之間。我希望它包含到開始日期和結束日期。我已經使用LocalDate,因爲我不想考慮時間部分只有日期部分。

下面是它的代碼。

isDateBetweenRange(LocalDate start,LocalDate end,LocalDate target){ 

     System.out.println("Start Date : " 
       +start.toDateTimeAtStartOfDay(DateTimeZone.forID("EST")); 

     System.out.println("Target Date : " 
       +targettoDateTimeAtStartOfDay(DateTimeZone.forID("EST")); 

     System.out.println("End Date : " 
       +end.toDateTimeAtStartOfDay(DateTimeZone.forID("EST")); 

     System.out.println(target.isAfter(start)); 

     System.out.println(target.isBefore(end)); 
} 

上述方法的輸出是:

Start Date: 2012-11-20T00:00:00.000-05:00 
Target Date: 2012-11-20T00:00:00.000-05:00 
End Date : 2012-11-21T00:00:00.000-05:00 
target.isAfter(start) : false 
target.isBefore(end) : true 

我的問題是target.isAfter(start)是即使target日期和start由具有相同值的假。我想要target >= start但這裏它只考慮target > start
我希望它包容。

這是否意味着isAfter方法專門查找匹配?

我已經瀏覽了Joda Time的javadoc,但沒有發現任何關於它的內容。

+0

檢查我的類似線程的答案,LocalDates的間隔: http://stackoverflow.com/a/14998753/1367432 –

回答

45

是的,isAfter是排他性的,否則它應該可能被命名爲isEqualOrAfter或類似的東西。

解決方法:使用「之前」而不是「之後」和「之後」而不是「之前」。

boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) { 
    return !target.isBefore(start) && !target.isAfter(end); 
} 
相關問題