找到所有周六和周日我要采取一切周六和周日在指定日期范围...从给定的日期范围
我的输入是
开始日期:01/01/2011 结束日期: 01/01/2012
现在搜索日期介于给定的开始日期和结束日期之间,日期为星期六或星期日。
请推荐...
找到所有周六和周日我要采取一切周六和周日在指定日期范围...从给定的日期范围
我的输入是
开始日期:01/01/2011 结束日期: 01/01/2012
现在搜索日期介于给定的开始日期和结束日期之间,日期为星期六或星期日。
请推荐...
首先,如果可能的话,我建议使用Joda Time。这是一个多更好的日期和时间API比内置到Java中。其次,除非你真的担心效率问题,否则我会亲自去做一些简单但有点浪费的方法,只是在这段时间内每天迭代,并且包括那些落在正确日子里的方法。交替增加一天和增加六天肯定会更有效率,但难以改变。
示例代码:
import java.util.*;
import org.joda.time.*;
public class Test
{
public static void main(String[] args)
{
List<LocalDate> dates = getWeekendDates
(new LocalDate(2011, 1, 1), new LocalDate(2011, 12, 1));
for (LocalDate date : dates)
{
System.out.println(date);
}
}
private static List<LocalDate> getWeekendDates
(LocalDate start, LocalDate end)
{
List<LocalDate> result = new ArrayList<LocalDate>();
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;
}
}
我建议看看this RFC-2445 Java开源库。您可以在周六和周日重复创建每周重复规则,然后遍历指定的周期以获取所有日期。
我认为,你可以使用下面的方式 - 它非常简单,你不需要使用其他库。
以工作日号码(周一= 1,周日= 7)。然后 - 选择新的开始日期,这是第一个周日发生 - >它是startDate +(7 - weekdayNum)。通过相同的算法,您可以从间隔中获取上个星期日(通过减去EndDate - weekdayNum - 1,我认为)。现在你可以进入循环遍历所有事件(使用增量步骤7)。或者如果你想要特定的发生,例如第3个星期天,你可以简单地做newStartDate + 3 * 7.
我希望,这很清楚。我不确定,如果数字是正确的。希望这有助于理解问题。
http://joda-time.sourceforge.net/ – NimChimpsky