java 将一段时间分割为两个连续的时间

eg:

20180901  -- 20180930

->>>>

20180901-20180915  && 20180916-20180930

/**
   * 获取两日期相差天数
   *
   * @param beginDateStr 时间起点
   * @param endDateStr 时间终点
   * @param TimeType 时间类型 yyyy-MM-dd || yyyyMMdd || ....
   * @return long /天数
   */
  public static long getDaySub(String beginDateStr, String endDateStr, String TimeType) {
    long day = 0;
    SimpleDateFormat format;
    try {
      format = new SimpleDateFormat(TimeType);
    } catch (Exception e) {
      System.out.println("getDaySub——>TimeType:"+TimeType);
      format = new SimpleDateFormat("yyyy-MM-dd");
    }
    Date beginDate;
    Date endDate;
    try {
      beginDate = format.parse(beginDateStr);
      endDate = format.parse(endDateStr);
      day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
    } catch (Exception e) {
      System.out.println("获取两时间差值出现异常 begin:" + beginDateStr + "  end:" + endDateStr);
    }
    if (day < 0) {
      day = day * -1;
    }
    return day;
  }

  /**
   * 将一段时间分割为两个连续的时间段
   *
   * @param dp 时间集合 <开始时间,结束时间>
   * @param TimeType 时间类型  yyyy-MM-dd || yyyyMMdd || ....
   * @return 1.两个相连的时间集合 2.null
   */
  public static List<Pair<String, String>> cutDatePair(Pair<String, String> dp, String TimeType) {
    List<Pair<String, String>> lst = new ArrayList<>();
    long ts = getDaySub(dp.left(), dp.right(), TimeType);
    if (ts < 2) {
      return null;
    }
    int day = (int) ts / 2;
    SimpleDateFormat format;
    try {
      format = new SimpleDateFormat(TimeType);
    } catch (Exception e) {
      format = new SimpleDateFormat("yyyy-MM-dd");
    }
    Date beginDate;
    try {
      beginDate = format.parse(dp.left());

      Calendar beginDataEnd = Calendar.getInstance();
      beginDataEnd.setTime(beginDate);
      beginDataEnd.add(Calendar.DAY_OF_YEAR, day);//"开始"的结束时间

      Calendar endDataBegin = Calendar.getInstance();
      endDataBegin.setTime(beginDate);
      endDataBegin.add(Calendar.DAY_OF_YEAR, day + 1);//"结束"的开始时间

      lst.add(new Pair<>(dp.left(), format.format(beginDataEnd.getTime())));
      lst.add(new Pair<>(format.format(endDataBegin.getTime()), dp.right()));

      System.out.println(
          "拆分时间 " + dp.left() + "-" + dp.right() + "  -->>  " + dp.left() + "-" + format
              .format(beginDataEnd.getTime()) +
              "   and " + format.format(endDataBegin.getTime()) + "-" + dp.right());
    } catch (Exception e) {
    }
    if(lst.isEmpty() || lst.size()!=2){
      return null;
    }
    return lst;
  }
原文地址:https://www.cnblogs.com/yishilin/p/9728937.html