mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
俩个时间区间之间取交集和并集
This commit is contained in:
parent
7116177225
commit
879163a912
@ -20,26 +20,18 @@ import java.time.LocalDateTime;
|
||||
import java.time.Year;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 时间工具类
|
||||
*
|
||||
* @author xiaoleilu
|
||||
* @see LocalDateTimeUtil java8日志工具类
|
||||
* @see DatePattern 日期常用格式工具类
|
||||
*
|
||||
* @author xiaoleilu
|
||||
*/
|
||||
public class DateUtil extends CalendarUtil {
|
||||
|
||||
@ -1889,6 +1881,32 @@ public class DateUtil extends CalendarUtil {
|
||||
return new DateRange(start, end, unit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 俩个时间区间取交集
|
||||
*
|
||||
* @param start 开始区间
|
||||
* @param end 结束区间
|
||||
* @return true 包含
|
||||
*/
|
||||
public static List<DateTime> rangeContains(DateRange start, DateRange end) {
|
||||
List<DateTime> startDateTimes = CollUtil.newArrayList((Iterable<DateTime>) start);
|
||||
List<DateTime> endDateTimes = CollUtil.newArrayList((Iterable<DateTime>) end);
|
||||
return startDateTimes.stream().filter(endDateTimes::contains).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 俩个时间区间取差集(end -> start)
|
||||
*
|
||||
* @param start 开始区间
|
||||
* @param end 结束区间
|
||||
* @return true 包含
|
||||
*/
|
||||
public static List<DateTime> rangeNotContains(DateRange start, DateRange end) {
|
||||
List<DateTime> startDateTimes = CollUtil.newArrayList((Iterable<DateTime>) start);
|
||||
List<DateTime> endDateTimes = CollUtil.newArrayList((Iterable<DateTime>) end);
|
||||
return endDateTimes.stream().filter(item -> !startDateTimes.contains(item)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 按日期范围遍历,执行 function
|
||||
*
|
||||
|
@ -12,8 +12,8 @@ import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* {@link Range} 单元测试
|
||||
* @author Looly
|
||||
*
|
||||
* @author Looly
|
||||
*/
|
||||
public class RangeTest {
|
||||
|
||||
@ -135,4 +135,36 @@ public class RangeTest {
|
||||
Assert.assertEquals(DateUtil.parse("2017-01-01"), rangeToList.get(0));
|
||||
Assert.assertEquals(DateUtil.parse("2017-01-02"), rangeToList.get(1));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void rangeContains() {
|
||||
// 开始区间
|
||||
DateTime start = DateUtil.parse("2017-01-01");
|
||||
DateTime end = DateUtil.parse("2017-01-31");
|
||||
DateRange startRange = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
|
||||
// 结束区间
|
||||
DateTime start1 = DateUtil.parse("2017-01-31");
|
||||
DateTime end1 = DateUtil.parse("2017-02-02");
|
||||
DateRange endRange = DateUtil.range(start1, end1, DateField.DAY_OF_YEAR);
|
||||
// 交集
|
||||
List<DateTime> dateTimes = DateUtil.rangeContains(startRange, endRange);
|
||||
dateTimes.parallelStream().forEach(System.out::println);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rangeNotContains() {
|
||||
// 开始区间
|
||||
DateTime start = DateUtil.parse("2017-01-01");
|
||||
DateTime end = DateUtil.parse("2017-01-30");
|
||||
DateRange startRange = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
|
||||
// 结束区间
|
||||
DateTime start1 = DateUtil.parse("2017-01-01");
|
||||
DateTime end1 = DateUtil.parse("2017-01-31");
|
||||
DateRange endRange = DateUtil.range(start1, end1, DateField.DAY_OF_YEAR);
|
||||
// 差集
|
||||
List<DateTime> dateTimes1 = DateUtil.rangeNotContains(startRange, endRange);
|
||||
dateTimes1.parallelStream().forEach(System.out::println);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user