时间段按照天数或者小时分割

时间段按照天数或者小时分割

/**

  • @author Christ

  • @version 1.0

  • @date 2021/4/22 13:28
    /
    public class DateRangeUtil {
    /
    *

    • 按小时计算
    • @param begin 开始时间
    • @param end 结束时间
    • @return 集合
      */
      public static List splitDateRangeByHour(Date begin, Date end) {
      System.out.println(“按小时切割”);
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(begin);
      List list = Lists.newArrayList();
      DateRange range = new DateRange();
      range.setBegin(begin);
      while (true) {
      calendar.add(Calendar.HOUR_OF_DAY, 1);
      if (calendar.getTime().after(end)) {
      range.setEnd(end);
      list.add(range);
      break;
      }
      if (calendar.get(Calendar.HOUR_OF_DAY) == 23) {
      calendar.set(Calendar.MINUTE, 59);
      calendar.set(Calendar.SECOND, 59);
      calendar.set(Calendar.MILLISECOND, 0);
      range.setEnd(calendar.getTime());
      list.add(range);
      //第二天时间计算,并创建新的时间段
      calendar.add(Calendar.SECOND, 1);
      range = new DateRange();
      range.setBegin(calendar.getTime());
      continue;
      }
      }
      return list;
      }

    /**

    • 按天计算分隔(效率高 ,只超过一天有问题)

    • @param begin 开始时间

    • @param end 结束时间

    • @return 集合
      /
      public static List splitDateRangeByDay(Date begin, Date end) {
      System.out.println(“按天切割”);
      long time = end.getTime() - begin.getTime();
      if (time == 0) {
      return Lists.newArrayList();
      }
      long hours = time / (60 * 60 * 1000);
      if (time % (60 * 60 * 1000) > 0) {
      hours += 1;
      }
      if (hours <= 24) {
      return splitDateRangeByHour(begin, end);
      }
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(begin);
      List list = Lists.newArrayList();
      DateRange range = new DateRange();
      range.setBegin(begin);
      while (true) {
      calendar.add(Calendar.DAY_OF_YEAR, 1);
      if (calendar.getTime().after(end)) {
      range.setEnd(end);
      list.add(range);
      break;
      }
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      calendar.set(Calendar.MILLISECOND, 0);
      //今天的开始
      Date tmpBeginTime = calendar.getTime();
      //计算出上一天的最后一秒
      calendar.add(Calendar.SECOND, -1);
      range.setEnd(calendar.getTime());
      list.add(range);
      //创建新的时间段
      range = new DateRange();
      range.setBegin(tmpBeginTime);
      //回到今天
      calendar.add(Calendar.SECOND, +1);
      }
      return list;
      }
      /
      *

    • 按天计算分隔,优化版

    • @param begin 开始时间

    • @param end 结束时间

    • @return 集合
      */
      public static List splitDateByBeginAndEnd(Date begin, Date end) {
      long days = DateUtil.betweenDay(begin, end, true);
      ArrayList DateRangeList = new ArrayList<>();
      if (DateUtil.isSameDay(begin,end)) {
      DateRange dateRange = new DateRange();
      dateRange.setEnd(end);
      dateRange.setBegin(begin);
      DateRangeList.add(dateRange);
      return DateRangeList;
      }
      for (int i = 0; i < days+1; i++) {
      Date endDateTime = DateUtil.endOfDay(begin);
      DateRange dateRange = new DateRange();
      dateRange.setBegin(begin);
      if (endDateTime.getTime()>end.getTime()){
      dateRange.setEnd(end);
      }else {
      long time = endDateTime.getTime();
      Date endDate = new Date(time+1);
      dateRange.setEnd(endDate);
      }
      DateRangeList.add(dateRange);
      long time = endDateTime.getTime();
      begin = new Date(time+1);
      // Calendar ca = Calendar.getInstance();
      // ca.setTime(endDateTime);
      // ca.add(Calendar.SECOND, 1);
      // begin = ca.getTime();

      }
      return DateRangeList;
      }
      }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值