在JodaTime中生成日期范围

时间:2012-02-16 14:36:32

标签: java 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);

  }

3 个答案:

答案 0 :(得分:13)

使用org.joda.time.Interval

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

答案 1 :(得分: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 :(得分:2)

我来到这里寻找这个,但我无法接受任何解决方案 - 我最终得到了以下内容:

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

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

请记住,LocalDates是不可变的,所以当你调用plusDays(...)时你实际上并没有改变它。另请注意,我使用&lt; =包括最后一天(在您的示例中,这将是1月31日)。