package com.casic.missiles.utils; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * @Description: * @Author: wangpeng * @Date: 2024/12/6 14:03 */ public class DateUtils { public static List<String> getMonthsBetween(String startTimeStr, String endTimeStr) { LocalDateTime startTime = LocalDate.parse(startTimeStr, DateTimeFormatter.ISO_DATE).atStartOfDay(); LocalDateTime endTime = LocalDate.parse(endTimeStr, DateTimeFormatter.ISO_DATE).atStartOfDay(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); List<String> months = new ArrayList<>(); LocalDateTime current = startTime; while (!current.isAfter(endTime)) { months.add(current.format(formatter)); current = current.plusMonths(1); } // 如果结束时间在当前日期之前,需要添加结束月份 if (current.getMonthValue() > endTime.getMonthValue()) { months.remove(months.size() - 1); // 移除超出的月份 months.add(endTime.format(formatter)); // 添加结束月份 } return months; } public static List<String> getSeasonsBetween(String startTimeStr, String endTimeStr) { LocalDate startTime = LocalDate.parse(startTimeStr, DateTimeFormatter.ISO_DATE); LocalDate endTime = LocalDate.parse(endTimeStr, DateTimeFormatter.ISO_DATE); // 取当月第一天, 避免startTime的日期大于endTime计算不出来的情况 startTime = LocalDate.of(startTime.getYear(), startTime.getMonthValue(), 1); endTime = LocalDate.of(endTime.getYear(), endTime.getMonthValue(), 1); Set<String> set = new HashSet<>(); LocalDate mark = startTime; while (true) { if (mark.isBefore(endTime) || mark.isEqual(endTime)) { String season = String.valueOf(mark.getYear()) + String.valueOf((mark.getMonthValue() + 2) / 3); set.add(season); // 加一个月 mark = mark.plusMonths(1); } else { break; } } // System.out.println(set); // set中是倒序, 重新排序 return set.stream().sorted().collect(Collectors.toList()); } }