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

相关文章
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
60 26
|
2月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
40 5
|
6月前
|
Java
Java基础之日期和时间
Java基础之日期和时间
40 1
|
2月前
|
NoSQL Java 调度
Java调度任务如何保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何保证相同任务在一个周期里只执行一次?
98 6
|
2月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
103 1
|
7月前
|
安全 Java 程序员
Java8实战-新的日期和时间API
Java8实战-新的日期和时间API
51 3
|
3月前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
56 14
|
4月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
57 3
|
4月前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
5月前
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
28 2