1.当年包含下一年且周期为最后一周
public static void main(String[] args) {
int year = 2021; // 要计算的年份
// 获取指定年份的第一天
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
int totalWeeks = 0; // 总周数
// 循环计算每周的日期范围
while (calendar.get(Calendar.YEAR) == year) {
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SUNDAY) {
totalWeeks++;
Date startDate = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH, 6);
Date endDate = calendar.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("第" + totalWeeks + "周: " + dateFormat.format(startDate) + " - " + dateFormat.format(endDate));
}
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
}
![](https://img-blog.csdnimg.cn/07c6c2f1f00c40549dafe099230a169d.png)
2.当年包含上一年且周期为第一周
public static void main(String[] args) {
int year = 2021; // 要计算的年份
List<String> dateList = new ArrayList<>();
// 获取指定年份的第一天
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// 计算总周数
int totalWeeks = calendar.getActualMaximum(Calendar.WEEK_OF_YEAR);
// 输出每周的日期范围并按倒序排序
for (int i = totalWeeks; i >= 1; i--) {
// 获取每周的起始日期
calendar.set(Calendar.WEEK_OF_YEAR, i);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date startDate = calendar.getTime();
// 获取每周的结束日期
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
Date endDate = calendar.getTime();
dateList.add("第" + i + "周(" + dateFormat.format(startDate) + "到" +
dateFormat.format(endDate) + ")");
}
/**
* 顺序反转
*/
Collections.reverse(dateList);
dateList.forEach(System.out::println);
}
![](https://img-blog.csdnimg.cn/406517376cdd429ab1bc192dd2f143d4.png)