2012-02-16 3 views
7

Мне нужно проверить, существует ли дата (в строке) в списке массивов.Создать диапазоны дат в JodaTime

У меня две даты, сначала мне нужно создать диапазоны дат между этими двумя датами и сохранить их в массиве. Это то, что я делаю.

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++) { 

Здесь я получаю проблему.

Type mismatch: cannot convert from DateTime to LocalDate 

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

    } 

ответ

11

Использование org.joda.time.Interval

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

Это неверно, так как LocalDate 'date' является только ReadablePartial, а не ReadableInstant. Вы должны создать интервал с использованием startDate и endDate (которые являются DateTimes), а затем проверить, находится ли date.toDateMidnight() в интервале, но будьте осторожны с endDate, поскольку он является исключительным в интервале. –

4

toLocalDate() Не работает?

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

В любом случае, вам действительно нужно сгенерировать каждую дату? Если я на самом деле не нужно, я бы просто сделать что-то похожее на это:

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

Я пришел сюда в поисках, но ни решения были приемлемы для меня - я закончил с следующее:

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

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

Имейте в виду, что LocalDates неизменны, так что вы на самом деле не изменить его, когда вы звоните plusDays (...). Также обратите внимание, что я использую < = включить последний день (в вашем примере это будет 31 января).

Смежные вопросы