Newer
Older
casic-metering-biz-xichang / casic-metering-common / src / main / java / com / casic / missiles / utils / DateUtils.java
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.split(" ")[0], DateTimeFormatter.ISO_DATE).atStartOfDay();
        LocalDateTime endTime = LocalDate.parse(endTimeStr.split(" ")[0], 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());
    }

}