当前位置: 首页 > news >正文

根据开始和结束日期,获取每一天和每个月的开始和结束日期的list

获取开始日期与结束日期之间每天的list

/**
     * 根据传入的开始时间和结束时间,筛选出所有的天的list;
     *
     * @param startTime
     * @param endTime
     */
    public Map<String, List<String>> fetchDayListBetweenStartAndEnd(String startTime, String endTime) {
        // 创建map
        Map<String, List<String>> map = Maps.newHashMap(); // guava的工具类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 开始时间列表
        List<String> startTimeList = Lists.newArrayList();// guava的工具类
        // 结束时间列表
        List<String> endTimeList = Lists.newArrayList(); // guava的工具类
        Date startDate = null;
        Date checkDate = null;

        try {
            startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            while (startDate.before(endDate) && month <= 11) {
                final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
                cal.set(Calendar.DAY_OF_MONTH, last);
                Date lastDayOfMonth = cal.getTime();
                if (lastDayOfMonth.after(endDate)) {
                    checkDate = endDate;
                } else {
                    checkDate = lastDayOfMonth;
                }

                // 遍历每个月的日期,并添加到start和end的list中
                cal.setTime(startDate);
                while (startDate.before(checkDate)) {
                    startTimeList.add(sdf.format(startDate));
                    endTimeList.add(sdf.format(startDate));
                    cal.add(Calendar.DAY_OF_MONTH, 1);
                    startDate = cal.getTime();
                }
                // 添加checkDate到start和end的list中
                startTimeList.add(sdf.format(checkDate));
                endTimeList.add(sdf.format(checkDate));

                // 当month为12时,遍历下一年
                month = month + 1;
                if (month == 12) {
                    year = year + 1;
                    month = 0;
                }
                cal.set(year, month, 1);
                startDate = cal.getTime();

                // 当endTime是月份的第一天时,设置startTime;
                startTime = sdf.format(startDate);
            }

            // 比较startTime和endDate:相等时,添加到start和end的list中
            if (startTime.equals(sdf.format(endDate))) {
                startTimeList.add(startTime);
                endTimeList.add(sdf.format(endDate));
            }
            if (!startTimeList.isEmpty() && !endTimeList.isEmpty()) {
                map.put("dayTimeList", startTimeList);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return map;
    }

获取开始日期与结束日期之间每个月的开始日期和结束日期的list

/**
     * 根据开始时间和结束时间,列出每个月的开始日期和结束日期,并分别放到startTimeList和endTimeList
     *
     * @param startTime
     * @param endTime
     */
    public Map<String, List<String>> fetchMonthFirstLastList(String startTime, String endTime) {
        // 创建map
        Map<String, List<String>> map = Maps.newHashMap(); // guava的工具类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 开始时间列表
        List<String> startTimeList = Lists.newArrayList();// guava的工具类
        // 结束时间列表
        List<String> endTimeList = Lists.newArrayList(); // guava的工具类

        Date startDate = null;

        try {
            startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);

            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            // 当开始日期在结束时期之前,添加日期到startTimeList和endTimeList中
            while (startDate.before(endDate) && month <= 11) {
                final int first = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
                cal.set(Calendar.DAY_OF_MONTH, first);
                Date firstDayOfMonth = cal.getTime();
                if (firstDayOfMonth.before(startDate)) {
                    startTimeList.add(sdf.format(startDate));
                } else {
                    startTime = sdf.format(firstDayOfMonth);
                    startTimeList.add(startTime);
                }
                final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
                cal.set(Calendar.DAY_OF_MONTH, last);
                Date lastDayOfMonth = cal.getTime();
                if (lastDayOfMonth.after(endDate)) {
                    endTimeList.add(sdf.format(endDate));
                } else {
                    endTimeList.add(sdf.format(lastDayOfMonth));
                }

                month += 1;
                if (month == 12) {
                    year = year + 1;
                    month = 0;
                }
                cal.set(year, month, 1);
                startDate = cal.getTime();
                // 当endTime是月份第一天时,设置startTime,再利用startTime.equals(sdf.format(endDate));
                // 添加startTime和endTime到list中
                startTime = sdf.format(startDate);
            }
            // 当结束日期是在月初第一天时,把开始日期和结束日期都添加上去
            if (startTime.equals(sdf.format(endDate))) {
                startTimeList.add(startTime);
                endTimeList.add(sdf.format(endDate));
            }

            // 添加
            if (!startTimeList.isEmpty() && !endTimeList.isEmpty()) {
                map.put("startTimeList", startTimeList);
                map.put("endTimeList", endTimeList);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return map;
    }

相关文章:

  • IDEA接入阿里云百炼中免费的通义千问[2025版]
  • 简单记录一下Oracle数据库与mysql数据库注入的不同。
  • 配置安全网站
  • c++_队列习题
  • 【每日八股】计算机网络篇(四):HTTP
  • stm32 f4 flash 调用时卡死
  • Flask Jinja语法总结篇
  • MySQL8.0窗口函数
  • 请谈谈 TypeScript 中的接口(interface)和类型别名(type alias),它们的区别是什么?
  • ThinkPHP8.0+MySQL8.0搭建简单实用电子证书查询系统
  • Kafka×DeepSeek:智能决策破取经八十一难!
  • 若依-导出后端解析
  • MySQL性能调优实战手册:从慢查询到执行计划全解析
  • springmvc想要一个模块使用相同的url的前缀,怎么处理
  • 配置 Thunderbird 以使用 outlook 邮箱
  • WebGPU:前端图形性能的新纪元——开启浏览器高性能计算新时代
  • Linux中Docker容器构建MariaDB数据库教程
  • 基于类型的声明接收props
  • 【深度学习】参数管理
  • 《平面几何强化训练题集》第2章5到9题
  • 有没有介绍做私家导游的网站/南京 seo 价格
  • wordpress网站模板/直播回放老卡怎么回事
  • 渐变配色网站/最全bt搜索引擎入口
  • 视觉品牌网站建设/企业专业搜索引擎优化
  • 网站模板制作与安装教程/一个完整的产品运营方案
  • 网站 动画 怎么做的/网络推广公司经营范围