Java 输入两个时间日期,输出每个自然月的起始和结束时间日期

简介: Java 输入两个时间日期,输出每个自然月的起始和结束时间日期

上代码:

public static List<CycleTimeVo> getMonthBetween(String minDate, String maxDate) throws Exception {
        //  ArrayList<String> result = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月
        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();
        min.setTime(sdf.parse(minDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
        max.setTime(sdf.parse(maxDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
        Calendar curr = min;
        List<CycleTimeVo> CycleTimeList=new ArrayList();
        while (curr.before(max)) {
            CycleTimeVo cycleTimeVo=new CycleTimeVo();
            cycleTimeVo.setStartTimeStr(sdf.format(curr.getTime()));
            String monthEnd = getMonthEnd(sdf.format(curr.getTime()));
            cycleTimeVo.setEndTimeStr(monthEnd);
            CycleTimeList.add(cycleTimeVo);
            //result.add(sdf.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }
        return CycleTimeList;
    }
    public static String getMonthEnd(String  time) throws ParseException {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        Date date= simpleDateFormat.parse(time);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        //设置为当月最后一天
        c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
        //将小时至23
        c.set(Calendar.HOUR_OF_DAY, 23);
        //将分钟至59
        c.set(Calendar.MINUTE, 59);
        //将秒至59
        c.set(Calendar.SECOND,59);
        //将毫秒至999
        c.set(Calendar.MILLISECOND, 999);
        // 获取本月最后一天的时间
        return simpleDateFormat.format(c.getTime());
    }


测试结果:


        List<CycleTimeVo> monthBetween = getMonthBetween("2019-01-01", "2020-06-03");
        System.out.println(monthBetween);


可以看到每个月的开始日期可结束日期都获取到了:


image.png


PS: 如果是要算出两个日期之间的月数,则只需要对最后的list取其size 即可。

相关文章
|
2月前
|
Java
Java基础之日期和时间
Java基础之日期和时间
22 1
|
3月前
|
安全 Java 程序员
Java8实战-新的日期和时间API
Java8实战-新的日期和时间API
33 3
|
4月前
|
安全 Java Unix
Java语言中的日期与时间处理技术
Java语言中的日期与时间处理技术
|
29天前
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
15 2
【前端学java】java中的日期操作(13)
|
21天前
|
Java
比较两个日期是否相等Java
这篇文章提供了Java中比较两个日期是否相等的两种方法:使用`Calendar`类和`SimpleDateFormat`类来确定两个日期是否为同一天,并附有详细的代码示例和测试结果。
|
2月前
|
Java API
Java基础之日期和时间
【7月更文挑战第4天】 Java日期时间API概览:Java 8之前,Date表示不可变时间点,Calendar用于计算,SimpleDateFormat处理格式化。Date的setXXX方法不推荐,Calendar支持加减操作。时区处理用TimeZone,Time仅处理时间(不含日期)。Java 8引入java.time包,提供Instant、LocalDate等线程安全类,改进了性能和易用性,支持时区和更复杂操作。后续将探讨Java 8的新特性!
29 1
|
2月前
|
安全 Java API
Java基础之日期和时间
【7月更文挑战第3天】 Java 8之前的日期时间处理涉及Date、Calendar、SimpleDateFormat及TimeZone类。Date是不可变对象,但不推荐直接调整时间。Calendar提供日期计算,而SimpleDateFormat用于格式化。Date和Calendar非线程安全,处理时区需用TimeZone。Java 8引入了java.time包,包含Instant、LocalDate等类,提供更现代、线程安全和高效的API,例如Instant用于时间戳,LocalDateTime表示日期和时间,ZonedDateTime处理时区。下节将探讨Java 8的新API。
87 2
|
2月前
|
Java API
Java中的日期和时间API详解
Java中的日期和时间API详解
|
3月前
|
Java 测试技术 API
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
【6月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 3
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
|
3月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
36 2