如何在Java中查找两个日期之间的所有有效日期

时间:2014-07-13 14:54:55

标签: java date calendar

我有2个日期:

Calendar c1 = Calendar.getInstance();
c1.set(2014, 1, 1);

Calendar c2 = Calendar.getInstance();
c2.set(2013, 11, 1);

如何获得这两个日期之间(包括)的所有有效日期列表?

4 个答案:

答案 0 :(得分:1)

尝试使用Joda-Time

List<LocalDate> dates = new ArrayList<LocalDate>();
int days = Days.daysBetween(startDate, endDate).getDays();
for (int i=0; i < days; i++) {
    LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i);
    dates.add(d);
}

答案 1 :(得分:1)

首先确定两个日期中的哪一个更早。如果c1c2之后,则交换对象。

然后创建一个循环,从c1打印当前日期,然后调用c1.add(Calendar.DAY_OF_MONTH, 1)。当c1超过c2时,请结束循环。

Here is a demo on ideone.请注意,月份数字从零开始,因此您的示例列举了2013年12月1日至2014年2月1日(含)之间的日期,而不是2013年11月1日至1月1日之间的日期, 2014年,正如该计划中的数字可能暗示的那样。

答案 2 :(得分:1)

我一般也建议使用joda-time,但这里是一个纯Java解决方案:

Calendar c1 = Calendar.getInstance();
c1.set(2013, 1, 1);

Calendar c2 = Calendar.getInstance();
c2.set(2014, 11, 1);

while (!c1.after(c2)) {
    System.out.println(c1.getTime());

    c1.add(Calendar.DAY_OF_YEAR, 1);
}

本质上:继续增加较早的日期,直到它在较晚的日期之后下降。如果您希望将它们保留在实际List<Calendar>中,则需要在每次迭代时复制c1并将副本添加到列表中。

答案 3 :(得分:1)

以下函数应该可以执行您想要的操作,而不必包含任何其他依赖项:

@Nonnull
public static List<Date> getDaysBetween(@Nonnull final Date start, @Nonnull final Date end)
{
    final List<Date> dates = new ArrayList<Date>();
    dates.add(start);
    Date nextDay = dayAfter(start);
    while (nextDay.compareTo(end) <= 0)
    {
        dates.add(nextDay);
    }
    return dates;
}

@Nonnull
public static Date dayAfter(final Date date)
{
    final GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.roll(Calendar.DAY_OF_YEAR, true);
    return gc.getTime();
}