2017-03-06 24 views
2

的某一天第n個星期幾在Java 8中,我發現了什麼是的Java 8:查找後一個月

TemporalAdjuster temporal = dayOfWeekInMonth(1,DayOfWeek.MONDAY) 

給出時間爲每月的第一個星期一,

next(DayOfWeek.MONDAY) 

給在特定日期後的下個星期一。

但是我想在特定日期之後找到第n個MONDAY。

例如,我想第二個星期一2017年6月6日之後,它應該是2017年6月19日 其中

dayOfWeekInMonth(2,DayOfWeek.MONDAY)

會給我2017年6月12日和

next(DayOfWeek.MONDAY) 

當然沒有第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

非常感謝您對這個漂亮的解決方案! –

相關問題