2011-10-11 54 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.

我希望,這很清楚。我不確定,如果數字是正確的。希望這有助於理解問題。