根据俩个时间拆分成以月为单位的时间段
每篇一句励志:冬天到了,春天还会远吗?
使用CV大法把代码拿过去直接就可以使用。
/**
* 传入俩个时间计算期间包含几个开始日期到结束日期
* @param begin
* @param end
* @return
*/
public static String getDateInterval(Date begin, Date end) {
// 开始日期不能大于结束日期
if (!begin.before(end)) {
return null;
}
Calendar cal_begin = Calendar.getInstance();
cal_begin.setTime(begin);
Calendar cal_end = Calendar.getInstance();
cal_end.setTime(end);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
StringBuffer strbuf = new StringBuffer();
while (true) {
if (cal_begin.get(Calendar.YEAR) == cal_end.get(Calendar.YEAR)
&& cal_begin.get(Calendar.MONTH) == cal_end
.get(Calendar.MONTH)) {
cal_begin.set(Calendar.HOUR_OF_DAY,0);
strbuf.append(sdf.format(cal_begin.getTime())).append("~")
.append(sdf.format(cal_end.getTime()));
break;
}
String str_begin = sdf.format(cal_begin.getTime());
String str_end = getMonthEnd(cal_begin.getTime());
cal_begin.add(Calendar.MONTH, 1);
cal_begin.set(Calendar.DAY_OF_MONTH, 1);
cal_begin.set(Calendar.HOUR_OF_DAY,00);
strbuf.append(str_begin).append("~").append(str_end).append("|");
}
String dateInterval = strbuf.toString();
System.out.println(dateInterval);
//此时输出的内容是下边这样子
//2021-03-23 12:00:00~2021-04-01 12:00:00|2021-04-01 00:00:00~2021-05-01 00:00:00|2021-05-01 00:00:00~2021-06-08 10:00:00
//因为第一段的结束时间的时分秒对不上,所以需要进行拆分 拼装
if(StringUtils.isNotBlank(dateInterval)){
//做第一段使时间的小时数的处理,大于39说明不止一个时间段
if(dateInterval.length() > 39){
// 第一个时间段的结束时间的小时不对,这是做截取
String substring = dateInterval.substring(0, 31);
// 把正确的后半段截取到
String substring1 = dateInterval.substring(39);
// 把最新的拼接上,第一段的结束时间的小时拼接成00点
dateInterval = substring+"00:00:00"+substring1;
}
}
//经过拆分拼装,此时输出的内容是下边这样子
//2021-03-23 12:00:00~2021-04-01 00:00:00|2021-04-01 00:00:00~2021-05-01 00:00:00|2021-05-01 00:00:00~2021-06-08 10:00:00
return dateInterval;
}
/**
* getDateInterval方法的结束时间计算
* @param date
* @return
*/
public static String getMonthEnd(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
calendar.add(Calendar.HOUR_OF_DAY, 24);
return sdf.format(calendar.getTime());
}