[英]How to find all valid dates between two dates in Java
我有兩個約會:
Calendar c1 = Calendar.getInstance();
c1.set(2014, 1, 1);
Calendar c2 = Calendar.getInstance();
c2.set(2013, 11, 1);
如何獲得這兩個日期之間(包括兩個日期)的所有有效日期的列表?
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);
}
首先確定兩個日期中的哪個更早。 如果c1
在 c2
之后 ,則交換對象。
之后,執行一個循環,從c1
打印當前日期,然后調用c1.add(Calendar.DAY_OF_MONTH, 1)
。 當c1
超過c2
,結束循環。
這是有關ideone的演示。 請注意,月份數字是從零開始的,因此您的示例將枚舉日期為2013年12月1日至2014年2月1日之間(包括兩端),而不是2013年11月1日至2014年1月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
並將副本添加到列表中。
@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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.