俩个日期计算小时,天数,月份,还有时间组合
以下方法就可以直接调用
/** * 计算月数 * @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 }