查找给定日期范围内的所有星期六和星期日

我希望在给定的日期范围内从周六和周日开始…

我的意见是

开课日期:01/01/2011结束日期:01/01/2012

现在在给定开始日期和结束日期之间的搜索日期将是星期六或星期日。

请建议……

首先,如果可能的话,我建议使用Joda Time 。 这是一个比Java内置的API更好的日期和时间API。

其次,除非你真的担心效率,否则我会亲自去寻找一种非常简单但有点浪费的方法,简单地在这段时间内每天都进行迭代,包括那些落在正确日子里的那些。 在增加一天和增加六天之间交替肯定会更有效率,但更难改变。

示例代码:

import java.util.*; import org.joda.time.*; public class Test { public static void main(String[] args) { List dates = getWeekendDates (new LocalDate(2011, 1, 1), new LocalDate(2011, 12, 1)); for (LocalDate date : dates) { System.out.println(date); } } private static List getWeekendDates (LocalDate start, LocalDate end) { List result = new ArrayList(); for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) { int day = date.getDayOfWeek(); // These could be passed in... if (day == DateTimeConstants.SATURDAY || day == DateTimeConstants.SUNDAY) { result.add(date); } } return result; } } 

我建议看看这个 RFC-2445 Java开源库。 您可以在Sat和Sun上重复创建每周重复规则,然后迭代指定的时间段以获取所有日期。

我想,您可以使用以下方式 – 它非常简单,您不需要使用其他库。

采用工作日编号(周一= 1,周日= 7)。 然后 – 选择新的开始日期,即第一个星期日出现 – >它是startDate +(7 – weekdayNum)。 通过相同的算法,你可以从间隔的最后一个星期日(通过减去EndDate – weekdayNum – 1,我认为)。 现在你可以循环完成所有出现(使用增量步骤7)。 或者如果你想要特定的出现,例如第3个星期日,你可以简单地做newStartDate + 3 * 7。

我希望,这很清楚。 我不确定,如果数字是正确的。 希望这有助于理解问题。