我有2个日期:
Calendar c1 = Calendar.getInstance();
c1.set(2014, 1, 1);
Calendar c2 = Calendar.getInstance();
c2.set(2013, 11, 1);
如何获得这两个日期之间(包括)的所有有效日期列表?
答案 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)
首先确定两个日期中的哪一个更早。如果c1
在 c2
之后,则交换对象。
然后创建一个循环,从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();
}