我需要检查数组列表中是否存在日期(字符串中)。
我有两个日期,首先我需要在这两个日期之间生成日期范围并将它们存储在数组中。这就是我在做的事情。
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);
}
答案 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日)。