俩个日期计算小时,天数,月份,还有时间组合

 以下方法就可以直接调用

    /**
     * 计算月数
     * @param startDate 开始时间
     * @param endDate 结束时间
     */
    @ApiOperation("月数获取")
    public static int mouthsBetween(Date  startDate, Date  endDate) {
        Calendar startCalendar = new GregorianCalendar();
        startCalendar.setTime(startDate);
        Calendar endCalendar = new GregorianCalendar();
        endCalendar.setTime(endDate);
        //计算月份和年份
        int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
        int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - 
        startCalendar.get(Calendar.MONTH);
        System.out.println("相差月份  "+diffMonth+"  相差年份  "+diffYear);
        return diffMonth;
    }

    /**
     * 计算天数
     * @param startDate 开始时间
     * @param endDate 结束时间
     */
    @ApiOperation("天数获取")
    public static long daysBetween(Date  startDate, Date  endDate) {
        long betweenDate = (endDate.getTime() - startDate.getTime())/(60*60*24*1000);
        return betweenDate;
    }

    /**
     * 计算小时
     * @param startDate 开始时间
     * @param endDate 结束时间
     */
    @ApiOperation("小数获取")
    public static long hoursBetween(Date  startDate, Date  endDate) {
        long betweenDate = (endDate.getTime() - startDate.getTime())/(60*60*1000);
        return betweenDate;
    }

1) 以下方法可直接调用,显示的数据格式

2020-1-11 01:00:00   2020-1-11 01:59:59

2020-1-11 02:00:00   2020-1-11 02:59:59

2020-1-11 03:00:00   2020-1-11 03:59:59

......

 1  /**
 2      * 小时的拼接
 3      * @param startDate 开始时间
 4      * @param endDate 结束时间
 5      */
 6     @ApiOperation("小时的拼接")
 7     public static List<String> getTodayHours(String startDate,String endDate) throws Exception {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 9         SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH");
10         //date1 转换以(2020-01-11 10:00:00)展示
11         Date date1 = simpleDateFormat1.parse(startDate);
12         String start=simpleDateFormat.format(date1);
13         Date date2 = simpleDateFormat.parse(endDate);
14         //初始时间拼接 date1(2020-01-11 10:00:00),initialTime(2020-01-11 10:59:59)
15         List dateList = new ArrayList<String>();
16         Calendar initialCalendar = Calendar.getInstance();
17         List tlist=new ArrayList<String>();
18         initialCalendar.setTime(date1);
19         initialCalendar.add(Calendar.MINUTE, 59);
20         initialCalendar.add(Calendar.SECOND, 59);
21         Date initialDate = initialCalendar.getTime();
22         String initial=simpleDateFormat.format(initialDate);
23         tlist.add(start);
24         tlist.add(initial);
25         dateList.add(tlist);
26         //计算时间
27         Date startDate1 = simpleDateFormat.parse(startDate);
28         Long hour=hoursBetween(startDate1,date2);
29         //获取24内的各时间点,可能跨天
30         for (int i=0; i<hour; i++) {
31             List timeList=new ArrayList<String>();
32             //给当前时间加一秒
33             initialCalendar.add(Calendar.SECOND, 1);
34             Date d1=initialCalendar.getTime();
35             //转成时间转成字符串固定格式
36             String str1=simpleDateFormat.format(d1);
37             //给当前时间加59分59秒
38             initialCalendar.add(Calendar.MINUTE, 59);
39             initialCalendar.add(Calendar.SECOND, 59);
40             Date d2 = initialCalendar.getTime();
41             //注意时间转换问题
42             Date replaceTime=d2;
43             String str2=simpleDateFormat.format(replaceTime);
44             timeList.add(str1);
45             timeList.add(str2);
46             //System.out.println("添加到数组中的数据:   "+timeList);
47             //为下一个时间段 设置初始值
48             initialCalendar.setTime(d2);
49             dateList.add(timeList);
50         }
51         return dateList;
52     }

 2)以下方法可直接调用,显示的数据格式

2020-1-11 00:00:00 2020-1-11 23:59:59

2020-1-12 00:00:00 2020-1-12 23:59:59

2020-1-13 00:00:00 2020-1-13 23:59:59

 1  /**
 2      * 天数的拼接
 3      * @param startDate 开始时间
 4      * @param endDate 结束时间
 5      */
 6     @ApiOperation("天数的拼接")
 7     public static List<String> getTodays(String startDate,String endDate) throws 
 8     Exception {
 9         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
10         SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
11 
12         //date1 转换以(2020-01-11 00:00:00)展示
13         Date date1 = simpleDateFormat1.parse(startDate);
14         String start=simpleDateFormat.format(date1);
15         Date date2 = simpleDateFormat.parse(endDate);
16         //startDate1为准确计算天数
17         Date startDate1 = simpleDateFormat.parse(startDate);
18         long today=daysBetween(startDate1,date2);
19 
20         //初始时间拼接 date1(2020-01-11 00:00:00),initialTime(2020-01-11 23:59:59)
21         List dateList = new ArrayList<String>();
22         Calendar initialCalendar = Calendar.getInstance();
23         //天数为1
24         List tlist = new ArrayList<String>();
25         initialCalendar.setTime(date1);
26         initialCalendar.add(Calendar.HOUR, 23);
27         initialCalendar.add(Calendar.MINUTE, 59);
28         initialCalendar.add(Calendar.SECOND, 59);
29         Date initialDate = initialCalendar.getTime();
30         String initial = simpleDateFormat.format(initialDate);
31         tlist.add(start);
32         tlist.add(initial);
33         dateList.add(tlist);
34         //获取24内的各时间点,可能跨天
35         System.out.println("天数是 " + today);
36         for (int i = 0; i < today; i++) {
37             List timeList = new ArrayList<String>();
38             //给当前时间加一秒
39             initialCalendar.add(Calendar.SECOND, 1);
40             Date d1 = initialCalendar.getTime();
41             //转成时间转成字符串固定格式
42             String str1 = simpleDateFormat.format(d1);
43             //给当前时间加23时59分59秒
44             initialCalendar.add(Calendar.HOUR, 23);
45             initialCalendar.add(Calendar.MINUTE, 59);
46             initialCalendar.add(Calendar.SECOND, 59);
47             Date d2 = initialCalendar.getTime();
48             //注意时间转换问题
49             Date replaceTime = d2;
50             String str2 = simpleDateFormat.format(replaceTime);
51             timeList.add(str1);
52             timeList.add(str2);
53             //System.out.println("添加到数组中的数据:   "+timeList);
54             //为下一个时间段 设置初始值
55             initialCalendar.setTime(d2);
56             dateList.add(timeList);
57         }
58 
59         return dateList;
60     }

 3)以下方法可直接调用,显示的数据格式

2020-1-01       2020-1-31

2020-2-01       2020-2-29 

2020-3-01        2020-3-31 

 1 /**
 2      * 月数的拼接
 3      * @param startDate 开始时间
 4      * @param endDate 结束时间
 5      */
 6     @ApiOperation("月数的拼接")
 7     public static List<String> getMonths(String startDate,String endDate) throws 
 8     Exception {
 9         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
10         SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM");
11         //date1 转换以(2020-01-11 00:00:00)展示
12         Date date1 = simpleDateFormat1.parse(startDate);
13         //
14         String start=simpleDateFormat.format(date1);
15         Date date2 = simpleDateFormat.parse(endDate);
16         System.out.println("date1是 "+date1+"date2是 "+date2);
17         //初始时间拼接 date1(2020-01-11 00:00:00),initialTime(2020-01-11 23:59:59)
18         List dateList = new ArrayList<String>();
19         Calendar initialCalendar = Calendar.getInstance();
20         List tlist=new ArrayList<String>();
21         initialCalendar.setTime(date1);
22         initialCalendar.add(Calendar.MONTH, 1);
23         initialCalendar.add(Calendar.DATE, -1);
24         Date initialDate = initialCalendar.getTime();
25         String initial=simpleDateFormat.format(initialDate);
26         tlist.add(start);
27         tlist.add(initial);
28         dateList.add(tlist);
29         //计算时间
30         Interval interval = new Interval(date1.getTime(),date2.getTime());
31         Period period = interval.toPeriod();
32         Integer months=period.getMonths();
33         //获取24内的各时间点,可能跨天
34         System.out.println("月数是 "+months);
35         for (int i=0; i<months; i++) {
36             List timeList=new ArrayList<String>();
37             //给当前时间加一秒
38             initialCalendar.add(Calendar.DATE, 1);
39             Date d1=initialCalendar.getTime();
40             //转成时间转成字符串固定格式
41             String str1=simpleDateFormat.format(d1);
42             //给当前时间加23时59分59秒
43             initialCalendar.add(Calendar.MONTH, 1);
44             initialCalendar.add(Calendar.DATE, -1);
45             Date d2 = initialCalendar.getTime();
46             //注意时间转换问题
47             Date replaceTime=d2;
48             String str2=simpleDateFormat.format(replaceTime);
49             timeList.add(str1);
50             timeList.add(str2);
51             //System.out.println("添加到数组中的数据:   "+timeList);
52             //为下一个时间段 设置初始值
53             initialCalendar.setTime(d2);
54             dateList.add(timeList);
55         }
56         return dateList;
57     }
原文地址:https://www.cnblogs.com/linyu1/p/14079239.html