根据输入的日期得到中间的日期

 /**
     * 根据 年、月 获取对应的月份 的 天数
     *
     * @param year
     * @param month
     * @return
     */
    public static int getDaysByYearMonth(int year, int month) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.YEAR, year);
        a.set(Calendar.MONTH, month - 1);
        a.set(Calendar.DATE, 1);
        a.roll(Calendar.DATE, -1);
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }
public static List<String> normalSql(String starttime, String endtime) {
        //存放日期号
        ArrayList<String> timelist = new ArrayList<String>();
        //对开始日期截取
        String[] startsplit = starttime.split("-");
        //对结束日期截取
        String[] endsplit = endtime.split("-");
        //如果起止时间是同一个月的情况
        if (Integer.parseInt(endsplit[1]) - Integer.parseInt(startsplit[1]) == 0) {
            int equalsday = Integer.parseInt(endsplit[2]) - Integer.parseInt(startsplit[2]);
            for (int i = 0; i <= equalsday; i++) {
                timelist.add(startsplit[0] + "_" + startsplit[1] + "_" + (String.valueOf(Integer.parseInt(startsplit[2]) + i).matches("(0)|(100)|([1-9])") ? "0" + String.valueOf(Integer.parseInt(startsplit[2]) + i) : String.valueOf(Integer.parseInt(startsplit[2]) + i)));
            }
        } else {
            //
            int startday = getDaysByYearMonth(Integer.parseInt(startsplit[0]), Integer.parseInt(startsplit[1]));
            //得出那个月低距离开始时间有几天
            int days = startday - Integer.parseInt(startsplit[2]);
            for (int i = 0; i <= days; i++) {
                timelist.add(startsplit[0] + "_" + startsplit[1] + "_" + (String.valueOf(Integer.parseInt(startsplit[2]) + i).matches("(0)|(100)|([1-9])") ? "0" + String.valueOf(Integer.parseInt(startsplit[2]) + i) : String.valueOf(Integer.parseInt(startsplit[2]) + i)));
            }
            if (Integer.parseInt(endsplit[0]) - Integer.parseInt(startsplit[0]) == 0) {
                int months = Integer.parseInt(endsplit[1]) - Integer.parseInt(startsplit[1]);
                for (int i = 0; i < months - 1; i++) {
                    int monthdayss = getDaysByYearMonth(Integer.parseInt(startsplit[0]), Integer.parseInt(startsplit[1]) + i + 1);
                    for (int j = 0; j < monthdayss; j++) {
                        timelist.add(startsplit[0] + "_" + (String.valueOf(Integer.parseInt(startsplit[1]) + i + 1).matches("(0)|(100)|([1-9])") ? "0" + String.valueOf(Integer.parseInt(startsplit[1]) + i + 1) : String.valueOf(Integer.parseInt(startsplit[1]) + i + 1)) + "_" + (j < 9 ? "0" + (j + 1) : j + 1));
                    }
                }
            }
            //起止时间相隔一年以及一年以上
            int years = Integer.parseInt(endsplit[0]) - Integer.parseInt(startsplit[0]);
            if (years >= 1) {
                //开始时间不完整年的日期到年末的日期拼接
                int startmonth = Integer.parseInt(startsplit[1]);
                for (int i = 0; i < 12 - startmonth; i++) {
                    int startyearmonthday = getDaysByYearMonth(Integer.parseInt(startsplit[0]), Integer.parseInt(startsplit[1]) + 1 + i);
                    for (int j = 0; j < startyearmonthday; j++) {
                        timelist.add(startsplit[0] + "_" + (String.valueOf(Integer.parseInt(startsplit[1]) + i + 1).matches("(0)|(100)|([1-9])") ? "0" + String.valueOf(Integer.parseInt(startsplit[1]) + i + 1) : String.valueOf(Integer.parseInt(startsplit[1]) + i + 1)) + "_" + (j < 9 ? "0" + (j + 1) : j + 1));
                    }
                }
                //拼接完整的年日期
                for (int i = 1; i < years; i++) {
                    for (int j = 0; j < 12; j++) {
                        //得到中间一整年的每月多少天
                        int modyearday = getDaysByYearMonth(Integer.parseInt(startsplit[0]) + 1, j + 1);
                        for (int k = 0; k < modyearday; k++) {
                            timelist.add((Integer.parseInt(startsplit[0]) + i) + "_" + (((j + 1) <= 9) ? "0" + (j + 1) : j + 1) + "_" + (((k + 1) <= 9) ? "0" + (k + 1) : k + 1));
                        }
                    }
                }
                //结束日期中不完整的年份到该年的起始日期拼接
                int endmonth = Integer.parseInt(endsplit[1]);
                for (int i = 0; i < endmonth - 1; i++) {
                    int endyearmonthday = getDaysByYearMonth(Integer.parseInt(endsplit[0]), i + 1);
                    for (int j = 0; j < endyearmonthday; j++) {
                        timelist.add(endsplit[0] + "_" + (((i + 1) < 9) ? "0" + (i + 1) : i + 1) + "_" + (j < 9 ? "0" + (j + 1) : j + 1));
                    }
                }
            }
            //对用户输入的结束日期进行截取
            //得到用户输入的结束日期的那月有多少天
            for (int i = 0; i < Integer.parseInt(endsplit[2]); i++) {
                timelist.add(endsplit[0] + "_" + endsplit[1] + "_" + (i < 9 ? "0" + (i + 1) : i + 1));
            }
        }
        return timelist;
    }

测试

@Test
    public void test2() {
        List<String> list = normalSql("2019-01-01", "2019-05-01");
        for(String s:list){
            System.out.println(s);
        }
    }

结果
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Insist_on_progress

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值