我试图弄清楚如何确定一个特定的星期一是给定月份的第一个,第二个,第三个或第四个星期一。我已经弄清楚了如何获取使用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 LocalDate:确定每月的哪个星期一(第1、2、3等),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48155322/