簡體   English   中英

如何在Java中查找兩個日期之間的所有有效日期

[英]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);

如何獲得這兩個日期之間(包括兩個日期)的所有有效日期的列表?

嘗試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);
}

首先確定兩個日期中的哪個更早。 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM