2012-11-27 12 views
21

Sto utilizzando la libreria Joda Time 2.1.Controllo intervallo date incluso in tempo Joda

Ho scritto un metodo per confrontare se una data data è tra un intervallo di date di no. Voglio che sia inclusivo per la data di inizio e la data di fine. Ho usato LocalDate perché non voglio prendere in considerazione la parte della data della parte dell'ora.

Di seguito è riportato il codice.

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

L'uscita del metodo sopra è:

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 

mio problema è target.isAfter(start) è falso anche se la data target e start stanno avendo gli stessi valori.

Io voglio quello target >= start ma qui esso considera solo target > start.
Lo voglio compreso.

Significa che il metodo isAfter trova una corrispondenza esclusivamente?

Ho passato il javadoc per Joda Time, ma non ho trovato nulla a riguardo.

+0

leggi la mia risposta in filo di simile da un intervallo di LocalDates: http://stackoverflow.com/a/14998753/1367432 –

risposta

45

Sì, isAfter è esclusivo, altrimenti probabilmente dovrebbe essere stato chiamato isEqualOrAfter o qualcosa di simile.

Soluzione: utilizzare "non prima" anziché "dopo" e "non dopo" anziché "prima".

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