我希望第一个星期一和最后一个星期日与当月重叠,即使星期一或星期日不是从当月开始。
例如,本月2017-04(4月),第一个星期一是3月27日,也就是4月30日的最后一个星期日。
答案 0 :(得分:3)
如果您可以使用新的Java 8方法,请查看所谓的时间调整器。特别是:
答案 1 :(得分:3)
TemporalAdjuster
接口提供了操作日期时间值的类。 TemporalAdjusters
类提供了几个方便的实现。
策略是首先确定当前日期。这需要一个时区。对于任何特定时刻,日期在全球范围内因地区而异。
从今天开始,获取本月的第一天和最后一天。从我们每个人那里,我们要求上一周或下一次出现我们想要的星期几。我们也接受月份的第一个或最后一个月可能实际上是期望的星期几,这是“或同一”在TemporalAdjusters
次呼叫中的含义。
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
课程。
答案 2 :(得分:0)
您可以使用日历并进行迭代,以查找您所寻找的日期:Calendar.getInstance().get(Calendar.MONDAY)
和Calendar.getInstance().get(Calendar.SUNDAY));