2012-02-16 95 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(它们是DateTime)创建一个间隔,然后测试date.toDateMidnight()是否在间隔中,但要小心endDate,因为它在时间间隔中是排他的。 – 2014-10-28 20:50:37

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(...)。另外请注意,我使用< =包括最后一天(在您的示例中,这将是1月31日)。