Jos*_*man 3 java dayofweek java-8 java-time localdate
我试图弄清楚如何确定特定星期一是某个月的第一个,第二个,第三个还是第四个星期一.我已经弄清楚如何获得使用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());
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,代码获取下一个星期一及其所在的星期.星期是2月的第二周,但是星期一不是第二个星期一,它是第一个星期一.任何有关这方面的帮助将不胜感激.
你不应该使用自己的算术.使用内置功能:
int week = nextMonday.get(ChronoField.ALIGNED_WEEK_OF_MONTH);
Run Code Online (Sandbox Code Playgroud)
使用代码中的日期,可以得到:
1
Run Code Online (Sandbox Code Playgroud)
这意味着你得到的星期一(2月5日)是这个月的第一个星期一.此外,您不需要任何一个,WeekFields因为该月的第一个星期一是该月的第一个星期一,无论哪一天是一周的第一天,或一年中的几周如何编号.
日期算术通常很复杂,容易出错.这也意味着即使你最终得到正确的计算,读者也很难说服自己/你自己你的代码是正确的.因此,最好使用我们信任的内置功能进行测试,并使用解释性名称而不是1和7之类的数字.
您可能会惊讶于要调用的字段ALIGNED_WEEK_OF_MONTH.将对齐的周数视为从本月1日开始的一周,无论是星期几,以及接下来的几周.2018年2月,第一个对齐的一周从2月1日星期四到2月7日星期三.以下一致的星期从2月8日星期四,2月15日和2月22日开始.显然,本月的第一个星期一是在第1周,第2个星期一,在第2周,等等.因此它可以使用ALIGNED_WEEK_OF_MONTH.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |