找到所有周六和週日我要採取一切週六和週日在指定日期範圍...從給定的日期範圍
我的輸入是
開始日期: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