美文网首页
计算两个时间段的差集

计算两个时间段的差集

作者: shen33 | 来源:发表于2020-10-17 17:14 被阅读0次
    
    
        // 计算as->ae时间段 与 bs->be时间段的交集
        private static LocalDate[] getTwoLocalDateSubtract(LocalDate as, LocalDate ae,
                                                           LocalDate bs, LocalDate be) {
    
            /**
             * 两个时间段的开始时间和结束时间分别是 As Ae  和Bs 和Be。
             * As >Be || Ae <Bs 只要满足这个关系,就代表两个时间区间没有交集。
             * !(As >Be || Ae <Bs) 则肯定有交叉区,并且交叉区肯定为四个时间点从小到大排序后中间两个点的时间区
             * 在把as-ae 区间扣减掉交叉区的时间
             */
            if (as.isAfter(be) || ae.isBefore(bs)) {
                return new LocalDate[]{as, ae};
            } else {
                LocalDate[] dates = {as, ae, bs, be};
                Arrays.sort(dates, LocalDate::compareTo);
                // 交集 = dates[1]->dates[2]
                LocalDate xs = dates[1];
                LocalDate xe = dates[2];
    
                // 判断 as—ae 与交叉区的差集
                if (xs.equals(as) && xe.equals(ae)) {
                    return null;
                }
                if (as.isEqual(xs) && ae.isAfter(xe)) {
                    return new LocalDate[]{xe.plusDays(1), ae};
                }
                if (as.isBefore(xs) && ae.isAfter(xe)) {
                    return new LocalDate[]{as, xs.minusDays(1), xe.plusDays(1), ae};
                }
                if (as.isBefore(xs) && ae.isEqual(xe)) {
                    return new LocalDate[]{as, xs.minusDays(1)};
                }
            }
            return null;
        }
    
    
    

    相关文章

      网友评论

          本文标题:计算两个时间段的差集

          本文链接:https://www.haomeiwen.com/subject/aalfmktx.html