编程语言
首页 > 编程语言> > Java 8 LocalDate:确定每月的星期几(第1,第2,第3等)

Java 8 LocalDate:确定每月的星期几(第1,第2,第3等)

作者:互联网

我试图弄清楚如何确定特定星期一是某个月的第一,第二,第三或第四个星期一.我已经弄清楚如何获得使用LocalDate类的下一个星期一和月份的周.

LocalDate now = LocalDate.of(2018, 2, 1);
LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int week = nextMonday.get(weekFields.weekOfMonth());

在上面的示例中,代码获取下一个星期一及其所在的星期.星期是2月的第二周,但是星期一不是第二个星期一,它是第一个星期一.任何有关这方面的帮助将不胜感激.

解决方法:

编辑:您应该采用Ole V. V的答案(ChronoField.ALIGNED_WEEK_OF_MONTH)而不是这个答案.

你可以弄清楚它是哪一天,除以7,然后加1:

LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
int weekNo = ((nextMonday.getDayOfMonth()-1) / 7) +1;

例如,这段代码:

LocalDate now = LocalDate.of(2018, 2, 1);
for(int i = 0; i < 10; i++) {
    now = now.with(next(DayOfWeek.MONDAY));
    int weekNo = ((now.getDayOfMonth()-1) / 7) +1;
    System.out.println("Date : " + now + " == " + weekNo);
}

打印出以下内容,这就是我认为你想要的……

Date : 2018-02-05 == 1
Date : 2018-02-12 == 2
Date : 2018-02-19 == 3
Date : 2018-02-26 == 4
Date : 2018-03-05 == 1
Date : 2018-03-12 == 2
Date : 2018-03-19 == 3
Date : 2018-03-26 == 4
Date : 2018-04-02 == 1
Date : 2018-04-09 == 2

标签:java,java-8,java-time,dayofweek,localdate
来源: https://codeday.me/bug/20190717/1486506.html