java判断多个日期范围之间是否有重叠(日期到天)
最近在导入功能时,需要判断"导入的时间范围+数据库已有时间段”是否有时间范围重叠数据,
,以下判断多个日期范围之间是否有重叠的代码。
/**
* 判断日期范围是否有重叠(日期到天)
*/
public static boolean overlapping(List<String> list) {
if (list == null || list.size() <= 1) {
return false;
}
for (int i = 0; i < list.size(); i++) {
String date1[] = list.get(i).split(" ");
Date beginDate1 = DateUtil.toShortDate(date1[0]);
Date endDate1 = DateUtil.toShortDate(date1[1]);
for (int j = i + 1; j < list.size(); j++) {
String date2[] = list.get(j).split(" ");
Date beginDate2 = DateUtil.toShortDate(date2[0]);
Date endDate2 = DateUtil.toShortDate(date2[1]);
if (!beginDate2.before(beginDate1)) {
if (!beginDate2.after(endDate1)) {
return true;
}
} else if (!endDate2.before(beginDate1)) {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
List<String> dates = new ArrayList<>();
dates.add("2020-06-01 2020-06-03");
dates.add("2020-07-01 2020-07-15");
System.out.println("日期范围是否重叠: " + overlapping(dates));
dates.add("2020-06-01 2020-8-15");
System.out.println("日期范围是否重叠: " + overlapping(dates));
}
输出结果为:
日期范围是否重叠: false
日期范围是否重叠: true
java 日期范围是否重叠的轮子,以下两者貌似都有实现,有兴趣的朋友可以查一下相关资料。
joda-time
guava range
参考资料
https://stackoverflow.com/questions/4387549/localdate-interval-in-joda-time
https://www.codenong.com/325933/