2012-02-16 11 views
7

Necesito comprobar si existe una fecha (en cadena) en la lista de arreglos.Generar intervalos de fechas en JodaTime

Tengo dos fechas, primero necesito generar intervalos de fechas entre estas dos fechas y almacenarlas en una matriz. Esto es lo que estoy haciendo.

DateTimeFormatter dateFromatter= DateTimeFormat.forPattern("MM/dd/yyyy"); 

DateTime startDate= formatter.parseDateTime("01/02/2012"); 
DateTime endDate= formatter.parseDateTime("01/31/2012"); 

List<LocalDate> dates = new ArrayList<LocalDate>(); 


    int days = Days.daysBetween(startDate, endDate).getDays(); 
    for (int i=0; i < days; i++) { 

Aquí es donde tengo problemas.

Type mismatch: cannot convert from DateTime to LocalDate 

> LocalDate listOfDates = 
> startDate.withFieldAdded(DurationFieldType.days(), i); 
> dates.add(listOfDates); 

    } 

Respuesta

11

Uso org.joda.time.Interval

Interval interval = new Interval(startDate, endDate); 
for (LocalDate date : dates) 
{ 
    if (interval.contains(date)) 
    // 
+2

Esto es incorrecto ya que LocalDate 'date' es solo un ReadablePartial no un ReadtableInstant. Debería crear un intervalo usando startDate y endDate (que son DateTimes) y luego probar si date.toDateMidnight() está en el intervalo, pero tenga cuidado con endDate ya que es exclusivo en un intervalo. –

4

¿No funciona toLocalDate()?

LocalDate listOfDates = 
    startDate.withFieldAdded(DurationFieldType.days(), i).toLocalDate(); 

De todos modos, ¿realmente necesita generar cada fecha? A menos que realmente necesito, me acaba de hacer algo similar a esto:

Interval interval = new Interval(startDate.withTimeAsStartOfDay(), 
           endDate.withTimeAsStartOfDay().plusDays(1)); 
boolean isInInterval = interval.contains(date.withTimeAsStartOfDay()); 
2

vine aquí en busca de esto, pero ni las soluciones aceptables para me - terminé con lo siguiente:

int days = Days.daysBetween(startDate, endDate).getDays(); 

for(int i = 0; i <= days; i++) { 
    dates.add(startDate.plusDays(i)); 
} 

tener en cuenta que LocalDates son inmutables por lo que no está realmente cambiando cuando se llama a plusDays (...). También tenga en cuenta que utilizo < = para incluir el último día (en su ejemplo, esto sería el 31 de enero).

Cuestiones relacionadas