2012-02-16 5 views
7

日付(文字列)が配列リストに存在するかどうかを確認する必要があります。JodaTimeで日付範囲を生成する

私は2つの日付があります。まず、これらの2つの日付の間の日付範囲を生成し、それらを配列に格納する必要があります。これは私がやっていることです。

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'はReadableInstantではなくReadablePartialであるため、これは間違っています。 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

を私はこれを探してここに来たが、どちらのソリューションはに許容できるものでした - 私は、私は次のようになってしまった:あなたはplusDays(...)を呼び出すときに、実際にそれを変更していないので、LocalDatesは不変で念頭に

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

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

ベア。また、最後の日を含めるには< =を使用することに注意してください(この例では、1月31日です)。

関連する問題