2012-11-27 16 views
21

私はJoda Time 2.1ライブラリを使用しています。ジョーダ時間の包括的な日付範囲チェック

私は指定された日付が日付範囲の間でないかどうかを比較する方法を書いています。私はそれが開始日と終了日に包括的であることを望みます。私は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が同じ値を持っている場合でも、falseです。

欲しいのはtarget >= startですが、こちらではtarget > startとします。
包括的です。

isAfterメソッドでは一致が排他的に検出されますか?

私はJoda TimeのJavadocを使いましたが、それについて何も見つかりませんでした。

+0

LocalDatesの間隔と同様のスレッドで私の答えをチェックしてください: http://stackoverflow.com/a/14998753/1367432 –

答えて

45

はい、isAfterは排他的です。それ以外の場合は、おそらくisEqualOrAfterなどと似ているはずです。

ソリューション: "after"の代わりに "not before"を使用し、 "before"の代わりに "not after"を使用してください。

boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) { 
    return !target.isBefore(start) && !target.isAfter(end); 
} 
関連する問題