2017-03-06 22 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

非常感谢您对这个漂亮的解决方案! –

相关问题