2011-10-11 55 views
0

找到所有周六和周日我要采取一切周六和周日在指定日期范围...从给定的日期范围

我的输入是

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

现在搜索日期介于给定的开始日期和结束日期之间,日期为星期六或星期日。

请推荐...

+1

http://joda-time.sourceforge.net/ – NimChimpsky

回答

0

首先,如果可能的话,我建议使用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; 
    }            
} 
0

我建议看看this RFC-2445 Java开源库。您可以在周六和周日重复创建每周重复规则,然后遍历指定的周期以获取所有日期。

0

我认为,你可以使用下面的方式 - 它非常简单,你不需要使用其他库。

以工作日号码(周一= 1,周日= 7)。然后 - 选择新的开始日期,这是第一个周日发生 - >它是startDate +(7 - weekdayNum)。通过相同的算法,您可以从间隔中获取上个星期日(通过减去EndDate - weekdayNum - 1,我认为)。现在你可以进入循环遍历所有事件(使用增量步骤7)。或者如果你想要特定的发生,例如第3个星期天,你可以简单地做newStartDate + 3 * 7.

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