java基于joda-date实现获取两个时间段对应类型的所有时间,比如说两年之间的所有日期,两年之间的所有月份

发布时间 2023-05-22 18:53:02作者: 若冲
/**
     * 获取两个时间段对应类型的所有时间
     *
     * @param type      日期类型,包含day、month、year
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    public static List<String> getBetweenTime(String type, String beginTime, String endTime) {

        if (type == null || beginTime == null || endTime == null) {
            return null;
        }
        List<String> timesList = Lists.newArrayList();
        DateTimeFormatter format;
        DateTime beginDateTime;
        DateTime endDateTime;
        //计算两个天数直接所有天数
        if (TYPE_DAY.equals(type)) {
            //格式化时间,避免计算误差
            format = DateTimeFormat.forPattern(PATTERN_DATE);
            beginDateTime = format.parseDateTime(beginTime);
            endDateTime = format.parseDateTime(endTime);
            //计算两个时间相差多少天
            int days = Days.daysBetween(beginDateTime, endDateTime).getDays();
            timesList.add(beginDateTime.toString(PATTERN_DATE));
            for (int i = 1; i < days + 1; i++) {
                timesList.add(beginDateTime.plusDays(i).toString(PATTERN_DATE));
            }
        }
        //计算两个月份直接所有月份
        else if (TYPE_MONTH.equals(type)) {
            //格式化时间,避免计算误差
            beginTime = beginTime.substring(0, 7);
            endTime = endTime.substring(0, 7);
            format = DateTimeFormat.forPattern(PATTERN_MONTH);
            beginDateTime = format.parseDateTime(beginTime);
            endDateTime = format.parseDateTime(endTime);
            //计算两个时间相差多少月
            int months = Months.monthsBetween(beginDateTime, endDateTime).getMonths();
            timesList.add(beginDateTime.toString(PATTERN_MONTH));
            for (int i = 1; i < months + 1; i++) {
                timesList.add(beginDateTime.plusMonths(i).toString(PATTERN_MONTH));
            }
        }
        //计算两个年份直接所有年份
        else if (TYPE_YEAR.equals(type)) {
            //格式化时间,避免计算误差
            beginTime = beginTime.substring(0, 4);
            endTime = endTime.substring(0, 4);
            format = DateTimeFormat.forPattern(PATTERN_YEAR);
            beginDateTime = format.parseDateTime(beginTime);
            endDateTime = format.parseDateTime(endTime);
            //计算两个时间相差多少年
            int years = Years.yearsBetween(beginDateTime, endDateTime).getYears();
            timesList.add(beginDateTime.toString(PATTERN_YEAR));
            for (int i = 1; i < years + 1; i++) {
                timesList.add(beginDateTime.plusYears(i).toString(PATTERN_YEAR));
            }
        }
        return timesList;
}

这个方法主要是传入开始时间和结束时间,然后根据类型,返回包含的所有日期。比如说 2021-2023 返回的就是 2021、2022、2023 ,2021-11~2022-01 返回的就是2021-11、2021-12、2022-01

因为工作中刚好需要用到,发现网上又没有就记录下,如有问题请反馈,随时调整。