Java 根据俩个时间拆分成以月为单位的时间段

根据俩个时间拆分成以月为单位的时间段

每篇一句励志:冬天到了,春天还会远吗?

使用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());
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值