// 计算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;
}
计算两个时间段的差集
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...