根据开始和结束日期,获取每一天和每个月的开始和结束日期的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;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基础篇——Ubuntu下Docker安装

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起进行Docker安装。 Docker的官方Ubuntu安装文档&#xff0c;如…

Python图形编程之EasyGUI: indexbox的用法

目录<<上一章&#xff1a;ynbox用法详解 下一章&#xff1a;boolbox用法详解 >> # 1 Python图形编程之EasyGUI: indexbox的用法 1.1 基本用法 indexbox提供用户一个选择不同选项的功能&#xff0c;不同的选项由按钮来表示&#xff0c;提供类似功能的还有choicebox…

大语言模型从理论到实践(第二版)-学习笔记(绪论)

大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型&#xff0c;由函数 P(w1w2 wm) 表示&#xff0c;可以形式化地构建为词序列 w1w2 wm 的概率分布&#xff0c;表示词序列 w1w2 wm…

突破极限!蓝耘通义万相2.1引爆AI多模态新纪元——性能与应用全方位革新

云边有个稻草人-CSDN博客 目录 一、 引言 二、 蓝耘通义万相2.1版本概述 三、 蓝耘通义万相2.1的核心技术改进 【多模态数据处理】 【语音识别与文本转化】 【自然语言处理&#xff08;NLP&#xff09;改进】 【跨平台兼容性】 四、 蓝耘注册 部署流程—新手也能轻松…

JVM常用概念之本地内存跟踪

问题 Java应用启动或者运行过程中报“内存不足&#xff01;”&#xff0c;我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言&#xff0c;需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构&#xff0c;来保证JVM应用的成功启动以及未来平…

p5.js:sound(音乐)可视化,动画显示音频高低变化

本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践&#xff0c;包括将音频振幅转化为图形、生成波形图。 承上一篇&#xff1a;vite&#xff1a;初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…

PDF处理控件Aspose.PDF,如何实现企业级PDF处理

PDF处理为何成为开发者的“隐形雷区”&#xff1f; “手动调整200页PDF目录耗时3天&#xff0c;扫描件文字识别错误导致数据混乱&#xff0c;跨平台渲染格式崩坏引发客户投诉……” 作为开发者&#xff0c;你是否也在为PDF处理的复杂细节消耗大量精力&#xff1f;Aspose.PDF凭…

ruo-yi项目启动备忘

ruo-yi项目启动遇到问题备忘 参考文档: 若依 手把手启动 https://blog.csdn.net/qq_43804008/article/details/132950644?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-132950644-blog-137337537.235^v43^pc_blog_bottom_…

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐ 示例 1&#xff1a; 输入&#xff1a;nums [3,9,2,1,7], k 3 输出&#xff1a;7 解释&#xff1a; 1 出现在两个大小为 3 的子数组中&#xff1a;[9, 2, 1]、[2, 1, 7] 2 出现在三个大小为 3 的子数组中&#xff1a;[3,…

Java 集合框架大师课:性能调优火葬场(四)

&#x1f680; Java 集合框架大师课&#xff1a;性能调优火葬场&#xff08;四&#xff09; &#x1f525; 战力值突破 95% 警告&#xff01;调优就像吃重庆火锅——要选对食材&#xff08;数据结构&#xff09;还要控制火候&#xff08;算法&#xff09;&#x1f336;️ 第一章…

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之&#xff0c;藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言&#xff1a;STM32G431RBT6实现嵌入式组第七届题目解析源码&…

KUKA机器人:智能制造的先锋力量

在科技日新月异的今天&#xff0c;自动化和智能化已成为推动制造业转型升级的重要引擎。作为全球领先的智能、资源节约型自动化解决方案供应商&#xff0c;KUKA机器人在这一浪潮中扮演着举足轻重的角色。本文将带您深入了解KUKA机器人的发展现状&#xff0c;探索其在智能制造领…

Ateme在云端构建可扩展视频流播平台

Akamai Connected Cloud帮助Ateme客户向全球观众分发最高质量视频内容。 “付费电视运营商和内容提供商现在可以在Akamai Connected Cloud上通过高质量视频吸引观众&#xff0c;并轻松扩展。”── Ateme首席战略官Rmi Beaudouin ​ Ateme是全球领先的视频压缩和传输解决方案提…

OceanBase社区年度之星专访:张稚京与OB社区的双向奔赴

2024年年底&#xff0c;OceanBase社区颁发了“年度之星”奖项&#xff0c;旨在表彰过去一年中为 OceanBase 社区发展作出卓越贡献的个人。今天&#xff0c;我们有幸邀请到这一荣誉的获得者——来自融科智联的张稚京老师&#xff0c;并对他进行了专访。 在过去的一年中&#xf…

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…

涨薪技术|Kubernetes(k8s)之Service服务

01Service简介 Kubernetes Pod 是有生命周期的&#xff0c;它们可以被创建&#xff0c;也可以被销毁&#xff0c;然而一旦被销毁生命就永远结束。通过 ReplicationController 能够动态地创建和销毁 Pod&#xff08;例如&#xff0c;需要进行扩缩容&#xff0c;或者执行 滚动升…

Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平台

介绍 生产服务应用可观测性在当下比较流行的方案&#xff0c;其中出现了大量高性能、开箱即用、易上手的的开源产品&#xff0c;大大丰富了在可观测性领域产品的多样性&#xff0c;本文讲述基于OTLP协议推送Java项目遥测数据&#xff08;日志、指标、链路&#xff09;到后端存储…

「mysql」Mac mysql一路畅通式安装

折腾了一上午&#xff0c;遇到的各种错误&#xff1a; 错误一&#xff1a;安装后&#xff0c;终端执行 mysql 或者执行 mysql -u root -p 时报错&#xff1a; ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)错误二&#xff1a;为解决错误一&…

Linux原生异步IO原理与实现(Native AIO)

异步 IO&#xff1a;当应用程序发起一个 IO 操作后&#xff0c;调用者不能立刻得到结果&#xff0c;而是在内核完成 IO 操作后&#xff0c;通过信号或回调来通知调用者。 异步 IO 与同步 IO 的区别如图所示&#xff1a; 从上图可知&#xff0c;同步 IO 必须等待内核把 IO 操作处…