获取两个日期之间的月份 (具体月份)一个是包含头尾 一个不包含头尾

最近再做一个项目 要计算连个月之间的相差的月份 网上特别多的是计算相差月份数 相差几个月 这个就不贴出来了 一百度全是的 完了之后就是相差月份详细的每个月不包括头尾的 比如计算 2018-12-12-2019-03-31相差的月份是  2019-01 02 "并没有算出 201812 和2019 03月份代码如下:

Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.set(2014, 9, 30);
        c2.setTime(new

                Date());
        System.out.println(c1.get(Calendar.YEAR) + " " + c1.get(Calendar.MONTH));
        while (c1.before(c2))

        {
            int m = c1.get(Calendar.MONTH) + 1;
            System.out.println(c1.get(Calendar.YEAR) + " " + (c1.get(Calendar.MONTH) + 1));
            c1.add(Calendar.MONTH, 1);
        }
        System.out.println(c1.get(Calendar.YEAR) + " " + (c1.get(Calendar.MONTH) + 1));

这个似乎第一个输出和第二输出  是包含头尾的 但是如果输入相同的日期 ,理想的情况只需要输出一个月份就行 但是实际会输出俩个 

所有有了以下的代码:

Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        c1.set(2018, 11, 1);
        c2.set(2019, 06, 30);
        String time = "";
        String time2 = "";
        Integer i = c1.get(Calendar.MONTH);

        StringBuffer month = new StringBuffer("0");
        StringBuffer mon = new StringBuffer("0");
        if (i == 0) {
            i = 12;
            time = String.valueOf(c1.get(Calendar.YEAR) - 1) + "" + i;
        } else if (String.valueOf(i).length() < 2) {
            month.append(i + "");
            time = String.valueOf(c1.get(Calendar.YEAR)) + month + "";
        } else {
            time = String.valueOf(c1.get(Calendar.YEAR)) + "" + String.valueOf(c1.get(Calendar.MONTH));
        }
        if (String.valueOf(c2.get(Calendar.MONTH)).length() < 2) {
            mon.append(c2.get(Calendar.MONTH));
            time2 = String.valueOf(c2.get(Calendar.YEAR)) + mon + "";
        } else {
            time2 = String.valueOf(c2.get(Calendar.YEAR)) + "" + String.valueOf(c2.get(Calendar.MONTH));
        }
        while (Integer.valueOf(time2) >= Integer.valueOf(time)) {
            System.out.println(time);
            month = new StringBuffer("0");
            mon = new StringBuffer("0");
            i = c1.get(Calendar.MONTH) + 1;
            if (String.valueOf(i).length() < 2) {
                month.append(i + "");
                time = String.valueOf(c1.get(Calendar.YEAR)) + month + "";
            } else {
                time = String.valueOf(c1.get(Calendar.YEAR)) + "" + String.valueOf(c1.get(Calendar.MONTH) + 1);
            }
            if (String.valueOf(c2.get(Calendar.MONTH)).length() < 2) {
                mon.append(c2.get(Calendar.MONTH));
                time2 = String.valueOf(c2.get(Calendar.YEAR)) + mon + "";
            } else {
                time2 = String.valueOf(c2.get(Calendar.YEAR)) + "" + String.valueOf(c2.get(Calendar.MONTH));
            }
            c1.add(Calendar.MONTH, 1);
        }
        
    }

最后输出:

201811,

201812,

201901,

201902

201903,

201904,

201905,

201906,

看上去很多 很蠢但是这个解决了我想要的数据  如果有更好的方法,请多多指教

posted @ 2019-11-03 12:44  BlackCatFish  阅读(626)  评论(0编辑  收藏  举报