2017-03-06 31 views
2

の特定の日の後に、n番目のDayOfWeekを探す、私が見つけたのJava 8:Javaの8月

TemporalAdjuster temporal = dayOfWeekInMonth(1,DayOfWeek.MONDAY) 

は、月の最初の月曜日のための時間を与え、そして

next(DayOfWeek.MONDAY) 

を与えています特定の日付の次の月曜日。

しかし、特定の日付の後にn番目のMONDAYを探したいと思います。

例えば、私は2017年6月6日の後に第二月曜日たいし、それが

dayOfWeekInMonth(2,DayOfWeek.MONDAY)

が私に2017年6月12日を与え、

next(DayOfWeek.MONDAY) 
ます2017年6月19日 する必要があります

には、もちろん、n番目のDayOfWeekのインジケータのパラメータはありません。それは2017-06-12である次の最初の月曜日を与えるでしょう。

どのように私はループせずに計算することができますか?

答えて

4

は次月曜日を検索し、その後、(N - 1)を追加週:

public static TemporalAdjuster nextNthDayOfWeek(int n, DayOfWeek dayOfWeek) { 
    return temporal -> { 
     Temporal next = temporal.with(TemporalAdjusters.next(dayOfWeek)); 
     return next.plus(n - 1, ChronoUnit.WEEKS); 
    }; 
} 

public static void main(String[] args) { 
    LocalDate date = LocalDate.of(2017, 3, 7); 
    date = date.with(nextNthDayOfWeek(2, DayOfWeek.MONDAY)); 
    System.out.println("date = " + date); // prints 2017-03-20 
} 
+0

は、この素敵なソリューションをありがとうございました! –