1.首先看下怎么获取指定日期(指定年/月)的周数量,此处以“周一”为例,若为其他,可自行修改
/**
* 获取指定某年某月有多少周
*
* @param year 年
* @param month 月
* @return 周数
*/
public static Integer getWeekNum(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DATE, 1);
month = month - 1;
calendar.set(Calendar.MONTH, month);
int count = 0;
while (calendar.get(Calendar.MONTH) == month) {
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
++count;
}
calendar.add(Calendar.DATE, 1);
}
return count;
}
2.获取指定周(年/月/第几周)的开始时间,同样此处以“周一”为例,若为其他,可自行修改
/**
* 获取某年某月某周的日期
*
* @param year 年份
* @param month 月份
* @param week 这个月的第几周
* @return 当天时间
*/
public static LocalDate getWeekDate(int year, int month, int week) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DATE, 1);
month = month - 1;
calendar.set(Calendar.MONTH, month);
int count = 0;
while (calendar.get(Calendar.MONTH) == month) {
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
if (week == ++count) {
return calendar.getTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
}
calendar.add(Calendar.DATE, 1);
}
return null;
}
3.有了上面的时间后,就可以很容易计算出指定周的结束时间:
LocalDate start = getWeekDate(2022,12,1);
LocalDate end = start.plusDays(6);