2012-11-27 8 views
21

Używam biblioteki Joda Time 2.1.Inclusive Data Range check w Czasie Jody

Napisałem metodę porównywania, jeśli dana data mieści się w przedziale dat nie. Chcę, aby było włączone do daty rozpoczęcia i zakończenia. Użyłem LocalDate, ponieważ nie chcę brać pod uwagę części daty tylko część czasu.

Poniżej znajduje się kod.

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)); 
} 

Wyjście z powyższej metody jest:

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 

Mój problem jest target.isAfter(start) jest fałszywe, nawet jeśli data target i start mają te same wartości.

Chcę tego target >= start, ale tutaj to tylko target > start.
Chcę to zawierać.

Czy to oznacza, że ​​metoda isAfter znajduje wyłącznie odpowiednik?

Przeszedłem przez javadoc dla Joda Time, ale nic nie znalazłem.

+0

Sprawdź moją odpowiedź w podobnym wątku, aby odstępie LocalDates: http://stackoverflow.com/a/14998753/1367432 –

Odpowiedz

45

Tak, isAfter jest wyłącznym, w przeciwnym razie prawdopodobnie powinien był mieć nazwę isEqualOrAfter lub coś podobnego.

Rozwiązanie: Użyj "nie przed" zamiast "po" i "nie po" zamiast "przed".

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