package Test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.junit.Test;
/**
 * 根据一段时间区间,按月份拆分成多个时间段
 * @author wjl
 *
 * 
 */
public class SplitDateUtil {
    /*
    * 测试数据
    * "2017/8/2","2017/8/2" √
    * "2017/8/2","2017/8/20" ×
    * "2017/8/2","2018/8/31" √
    * "2017/8/2","2017/8/31" √
    * "2017/8/2","2018/4/20" √
    * "2017/8/22","2018/4/10" √
    */
    @Test
    public void demo(){
        SplitDateUtil.getKeyValueForDate("2017/8/2","2017/8/2");
        System.out.println("-------------------");
        SplitDateUtil.getKeyValueForDate("2017/8/2","2017/8/20");
        System.out.println("-------------------");
        SplitDateUtil.getKeyValueForDate("2017/8/2","2018/8/31");
        System.out.println("-------------------");
        SplitDateUtil.getKeyValueForDate("2017/8/2","2018/4/20");
        System.out.println("-------------------");
        SplitDateUtil.getKeyValueForDate("2017/8/22","2018/4/10");
        System.out.println("-------------------");
        SplitDateUtil.getKeyValueForDate("2017/8/22","2016/4/10");
    }
    /**
    * 根据一段时间区间,按月份拆分成多个时间段
    * @param startDate 开始日期
    * @param endDate  结束日期
    * @return
    */
    public static List<KeyValueForDate> getKeyValueForDate(String startDate,String endDate) {
        List<KeyValueForDate> list = null;
        try {
            list = new ArrayList<KeyValueForDate>();
            // 定义起始日期
            Date d1 = new SimpleDateFormat("yyyy/MM/dd").parse(startDate);
            // 定义结束日期
            Date d2 = new SimpleDateFormat("yyyy/MM/dd").parse(endDate);
            // 获取Calendar
            Calendar calendar = Calendar.getInstance();
            // 设置时间
            calendar.setTime(d1);
            // 设置日期为最大日期
            calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            Date d3 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime()));
            //System.out.println(sdf.format(d3));
            Date temp1 = d1;
            Date temp2 = d3;
            //结束日期小于开始日期
            if(d2.before(d1)){
                System.out.println("请输入正确的结束日期!");
                return null;
            }
            //结束日期大于开始日期
            while (temp2.before(d2)) {
                System.out.println(sdf.format(temp1)+"--------"+sdf.format(temp2));
                //获取下一个月第一天
                calendar.add(Calendar.MONTH, 1);
                calendar.set(Calendar.DAY_OF_MONTH,1);
                temp1 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime())) ;
                //获取下一个月份的最后一天
                calendar.setTime(temp1);
                calendar.add(Calendar.MONTH, 0);
                calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
                temp2 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime())) ;
            }
            System.out.println(sdf.format(temp1)+"--------"+sdf.format(d2));
        } catch (Exception e) {
            return null;
        }
        return null;
    }
}

class KeyValueForDate{

private String startDate;
    
    private String endDate;
    
    public String getStartDate() {
        return startDate;
    }
    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }
    public String getEndDate() {
        return endDate;
    }
    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }

}

根据一段时间区间,按月份拆分成多个时间段相关推荐

  1. sql 查询一段时间区间内的值

    1.sql 查询一段时间区间内的值 select to_char(to_date('2022-03-02','yyyy-mm-dd')+level-1,'yyyy-mm-dd') as day_val ...

  2. Python 获取(字典)字符串时间区间并转换类型,判断该时间段属否在时间范围

    源码实例 : 获取(字典)字符串时间区间并转换类型 import datetime"ssh": {"username": "johnny", ...

  3. mysql怎么在一段时间区间内按照周分组,把属于一周的数据汇总在一起以及如何自定义周?

    小编在写需求的时候发现有一个需求是给出一个开始.起止时间,需要你把每一周的数据汇总然后展现出来,比如给了前四周的日期,需要你自动汇总第一周到第四周的数据,奇葩的来了,正常来说周一到周日为一周,或者周日 ...

  4. Java 将一段时间以周、月、季分割

    本文所有使用的时间戳均为毫秒级 得到的集合区间也是毫秒级的时间戳 按周分割时间 代码如下: @Test public void timeSplitByWeek() {// 1.开始时间 2019-06 ...

  5. php 间隔时间执行任务,PHP间隔一段时间执行代码的方法

    PHP间隔一段时间执行代码的方法 发布于 2015-11-16 18:26:46 | 230 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...

  6. oracle查询大于某个日期的数据,查看某天(或某个时间区间)的数据,请别用between ... and ......

    -- 最近经常看到有人在某段时间区间上喜欢用between ... and ... ,其实,可以直接地说:这种用法是错误的! -- 查看某一天的数据,或某一段时间内的数据,其实是一个左闭.右开的区间内 ...

  7. 算法会议室问题及计算重叠时间区间段

    算法会议室问题及计算重叠时间区间段 1. 会议室问题 2. 计算重叠时间区间段 1. 会议室问题 package com.zrj.algorithm.test;import cn.hutool.cor ...

  8. 专访黄勇:Java在未来的很长一段时间仍是主流

     专访黄勇:Java在未来的很长一段时间仍是主流 发表于2015-09-06 13:18| 11640次阅读| 来源CSDN| 70 条评论| 作者钱曙光 社区文旦专访黄勇架构框架JavaJava ...

  9. 一段时间以来的SEO优化结果

    其实也没有刻意去做SEO优化,只是最近的博客写得比较勤力一点,而且也确确实实在做一些SEO的事情,但坦白讲,以我个人的经验来说,我发现现在很多网上的SEO都是在忽略的,骗搜索引擎的,我觉得这样是没有好 ...

最新文章

  1. 人工智能军事对抗技术发展趋势
  2. 比特币现金仍然是一个比较好的投资
  3. ITK:过滤图像而没有复制其数据
  4. 认证(登录)功能需求分析
  5. Android之在ubuntu上常用的am、pm命令的总结
  6. [Unity] ACT 战斗系统学习 5:使用 ScriptableObject 制作角色属性 1
  7. lte 在网络覆盖方面应该注意哪些问题_TD-LTE网络深度覆盖三个受限因素及四大解决策略...
  8. Bailian4014 字符串加密【密码】
  9. 设计模式(9)----- 创建型模式-----工厂设计模式(抽象工厂模式)
  10. 限制root远程登录
  11. 通达OA执着创新 只为让梦想照进现实
  12. Android中微信抢红包插件原理解析和开发实现
  13. 想用html5改写妄撮
  14. 网络计算机怎么使用,如何让电脑使用ipv6地址?一文了解清楚
  15. 详细解读 SQL 窗口函数
  16. vue2和vue3关闭语法检查
  17. android QQ分享、QQ空间分享
  18. jpi多表联查_使用mybatis进行多表联查
  19. 74HC138芯片简析
  20. MSP430单片机 MTH01-SPI 温湿度传感器 程序

热门文章

  1. C, C++, Network编程经典书籍
  2. 秋招在即,你准备好了吗?BAT算法工程师面试经验分享。
  3. Springboot企业出纳系统的设计与实现7k9je计算机毕业设计-课程设计-期末作业-毕设程序代做
  4. vmware安装打印机(win10)
  5. 从零开始学R(三)——基本计算
  6. 智佩店装完成千万级天使轮融资,深耕连锁店装
  7. Windows8.1设置默认输入法为英文
  8. (八)JVM成神路之GC分区篇:G1、ZGC、ShenandoahGC高性能收集器深入剖析
  9. 怎样把CAD图纸的背景颜色修改成白色?
  10. 人脸实名认证实现方案(微信H5百度云篇)