1.严格按照所在月份拆分
/**
*严格按照所在月份拆分
* @param startDate 2021-12
* @return
*/
public static List<String> getWeekDay(String startDate) {
LocalDate date = LocalDate.parse(startDate+"-01");
// 该月第一天
LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
// 该月最后一天
LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
// 该月的第一个周一
LocalDate start = date.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
List<String> list = new ArrayList<>();
// 处理每个月的1号不是周一的情况
if (!firstDay.equals(start)) {
StringBuilder strbur = new StringBuilder();
strbur.append(firstDay.toString()).append("~").append(start.plusDays(-1).toString());
list.add(strbur.toString());
}
while (start.isBefore(lastDay)) {
StringBuilder strbur = new StringBuilder();
strbur.append(start.toString());
LocalDate temp = start.plusDays(6);
if (temp.isBefore(lastDay)) {
strbur.append("~").append(temp.toString());
} else {
strbur.append("~").append(lastDay.toString());
}
list.add(strbur.toString());
start = start.plusWeeks(1);
}
return list;
}
2.不严格按照月份拆分(跨月时将上月日期算到下月的第一周)
/**
* 不严格按照月份拆分(跨月时将上月日期算到下月的第一周)
* @param startDate 2021-12
* @return
*/
public static List<String> getWeekDay(String startDate) {
// Java8 LocalDate
LocalDate date = LocalDate.parse(startDate + "-01");
// 该月第一天所在周的 周一
LocalDate firstDay=date.with(TemporalAdjusters.previous(java.time.DayOfWeek.SUNDAY)).plusDays(1);
// 该月的第一个周一
LocalDate start = date.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
// 该月的最后一个周日
LocalDate lastDay = date.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
List<String> list = new ArrayList<>();
// 处理每个月的1号不是周一的情况
if (!firstDay.equals(start)) {
LocalDateToUdate();
StringBuilder strbur = new StringBuilder();
strbur.append(firstDay.toString()).append("~").append(start.plusDays(-1).toString());
list.add(strbur.toString());
}
while (start.isBefore(lastDay)) {
StringBuilder strbur = new StringBuilder();
strbur.append(start.toString());
LocalDate temp = start.plusDays(6);
if (temp.isBefore(lastDay)) {
strbur.append("~").append(temp.toString());
} else {
strbur.append("~").append(lastDay.toString());
}
list.add(strbur.toString());
start = start.plusWeeks(1);
}
return list;
}