我想获取与当月重叠的周中的第一个星期一和最后一个星期日,即使星期一或星期日不是当月的。
比如本月2017-04(4月),第一个星期一是3月27日,最后一个星期日是4月30日。
最佳答案
TemporalAdjuster
接口(interface)提供类来操作日期时间值。 TemporalAdjusters
类提供了几个方便的实现。
策略是先确定当前日期。这需要一个时区。对于任何给定时刻,日期在全局范围内因地区而异。
从今天开始,获取当前月份的第一天和最后一天。我们从每个人那里询问我们想要的星期几的上一次或下一次出现。我们还接受一个月的第一天或最后一天实际上可能是所需的星期几,这就是下面看到的 TemporalAdjusters
调用中“orSame”的含义。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
LocalDate firstOfMonth = today.with( TemporalAdjusters.firstDayOfMonth() );
LocalDate monday = firstOfMonth.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );
LocalDate endOfMonth = today.with( TemporalAdjusters.lastDayOfMonth() );
LocalDate sunday = endOfMonth.with( TemporalAdjusters.nextOrSame( DayOfWeek.SUNDAY ) );
顺便说一下,如果你需要代表整个月,看看YearMonth
类。
关于java - 获取月份的第一个星期一和最后一个星期日,跨越月份边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238152/