Java 将两个日期的时间段按照一定天数进行周期切割

简介: Java 将两个日期的时间段按照一定天数进行周期切割

上代码:

    public  static List<CycleTimeVo> getCycleList(int cycleNum,String startTime,String endTime) throws ParseException {
        System.out.println("统计的时间段为:从"+startTime+"到"+endTime);
        Date endParse = new SimpleDateFormat("yyyy-MM-dd").parse(endTime);
        Long endLong = endParse.getTime();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//这个是你要转成后的时间的格式
        endTime = sdf.format(new Date(endLong));
        System.out.println("结束时间是:"+endTime);
        int daysBetweenNum = daysBetween(startTime, endTime);
        int cycleForNum = daysBetweenNum % cycleNum == 0 ? (daysBetweenNum / cycleNum) : (daysBetweenNum / cycleNum) + 1;
        System.out.println("两日期间相隔的天数为:" + daysBetweenNum);
        System.out.println("周期选择是:" + cycleNum + "天一周期, 则切割出来的周期存在个数:" + cycleForNum);
        Date startParse = new SimpleDateFormat("yyyy-MM-dd").parse(startTime);
        Long startLong = startParse.getTime();
        Long calculationLong = startLong;
        List<CycleTimeVo> CycleTimeList=new ArrayList();
        for (int i = 1; i <= cycleForNum; i++) {
            String startStr = sdf.format(new Date(calculationLong));
            Date startStrParse = new SimpleDateFormat("yyyy-MM-dd").parse(startStr);
            Long startStrLong = startStrParse.getTime();
            Long cycleLong = cycleNum*86400000l;
            calculationLong = startStrLong + cycleLong;
            String endStr = endTime;
            if (calculationLong <= endLong) {
                endStr = sdf.format(new Date(calculationLong));
            }
            System.out.println("起始:" + startStr + "结束:" + endStr);
            CycleTimeVo cycleTimeVo=new CycleTimeVo();
            cycleTimeVo.setStartTimeStr(startStr);
            cycleTimeVo.setEndTimeStr(endStr);
            CycleTimeList.add(cycleTimeVo);
        }
        System.out.println("周期list:"+CycleTimeList.toString());
        return CycleTimeList;
    }
    public static int daysBetween(String smdate, String bdate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(smdate));
        long time1 = cal.getTimeInMillis();
        cal.setTime(sdf.parse(bdate));
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }


测试结果:


第一个参数为周期的天数,这里示例为7天一个周期切割,


getCycleList(7,"2020-02-01","2020-02-14");


可以看到结果正确:


image.png

相关文章
|
1月前
|
Java
Java周期循环的代码可以如此简单
Java周期循环的代码可以如此简单
26 2
|
1月前
|
Java 关系型数据库 MySQL
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
27 0
|
3月前
|
Java API
Java 8 时间和日期 API
Java 8 时间和日期 API
36 1
|
4月前
|
Java Unix 程序员
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
62 1
|
1月前
|
Java
java中日期处理的一些工具方法
java中日期处理的一些工具方法
17 1
|
3月前
|
数据库 Java
JAVA获取指定日期是星期几
JAVA获取指定日期是星期几
|
14天前
|
Java BI
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
|
16天前
|
Java
java判断时间是否为节假日(或指定的日期),是的话返回true,否返回false
java判断时间是否为节假日(或指定的日期),是的话返回true,否返回false
22 0
|
1月前
|
Java
java中,根据指定日期显示出前n天的日期
java中,根据指定日期显示出前n天的日期
9 0
|
1月前
|
Java API
Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间
简介 Scanner 类用于获取用户输入,它位于 java.util 包中。 使用 Scanner 类 要使用 Scanner 类,请执行以下步骤: 导入 java.util.Scanner 包。 创建一个 Scanner 对象,并将其初始化为 System.in。 使用 Scanner 对象的方法读取用户输入。
52 1

热门文章

最新文章