根据业务需要获取指定的月份区间,每月底有一个触发时间点,需要获取到该时间点前一周的周日作为结束时间,而开始时间则以上一个月的相同时间点所在周的周一做为开始时间。
代码如下:
LocalDate localDate = LocalDate.now();
System.out.println("当前时间:"+localDate);
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDate firstDayMonth = firstDayOfMonth.with(DayOfWeek.MONDAY);
System.out.println("每月1号的周所在周的周一:"+firstDayMonth);
LocalDate firstDay = localDate.with(DayOfWeek.MONDAY);
System.out.println("当前周周一:"+firstDay+" 00:00:00");
LocalDate firstMonday = localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("当前月第一周周一:"+firstMonday+" 00:00:00");
LocalDate lastSunday = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("当前月最后一个周日:"+lastSunday+" 23:59:59");
LocalDate May=localDate.minusMonths(1);
LocalDate April=localDate.minusMonths(2);
LocalDate March=localDate.minusMonths(3);
LocalDate Feb=localDate.minusMonths(4);
LocalDate Jan=localDate.minusMonths(5);
System.out.println("五月:"+May+" 四月:"+April+" 三月:"+March+" 二月:"+Feb+" 一月:"+Jan);
// 获取上个月的最后一个周三所在周的周一 -- 开始时间
// 获取上一个月
LocalDate lastMonth = localDate.minusMonths(1);
System.out.println("前一个月的最后一天:"+lastMonth);
LocalDate lastMonthofLastWednsday = lastMonth.with(TemporalAdjusters.lastInMonth(DayOfWeek.WEDNESDAY));
System.out.println("前一个月最后一个周三:"+lastSunday+" 23:59:59");
LocalDate lastMonthOfMonday = lastMonthofLastWednsday.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)).plusDays(1);
LocalDate lastMonthOdMondayNew = lastMonthofLastWednsday.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("前一个月最后一个周三的周一:"+lastMonthOfMonday+","+lastMonthOdMondayNew);
// 当前月的最后一个周三所在周的上周的周日 --结束时间
LocalDate lastWednsday = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.WEDNESDAY));
System.out.println("当前月最后一个周三:"+lastWednsday+" 23:59:59");
// 最后一个周三的上一周的周三
LocalDate lastSecondWednsday = lastWednsday.minusDays(7);
System.out.println("当月最后一个周三的上周三:"+lastSecondWednsday);
LocalDate lastSecondSunday = lastSecondWednsday.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).minusDays(1);
LocalDate lastSecondSundayNew = lastSecondWednsday.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("当前月最后一个周三的上周日:"+lastSecondSunday+","+lastSecondSundayNew);
LocalDate lastWednsdayOfMonday = lastWednsday.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("当前月最后一个周三所在周的周一:"+lastWednsdayOfMonday);
LocalDate wednsday = localDate.with(DayOfWeek.WEDNESDAY);
if(localDate.equals(wednsday)) {
System.out.println("同一天!");
}
运行结果如下:
![](https://img.haomeiwen.com/i5568893/6d3cb4a56501dae5.png)
纠正:
lastMonthOfMonday 获取的日期并非是当前时间前一个月最后一个周三的周一
lastSecondSunday 获取的日期也并非是当前时间的最后一个周三的上周日
网友评论