最近在导入功能时,需要判断"导入的时间范围+数据库已有时间段”是否有时间范围重叠数据, ,以下判断多个日期范围之间是否有重叠的代码。
/** * 判断日期范围是否有重叠(日期到天) */ 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 日期范围是否重叠: truejava 日期范围是否重叠的轮子,以下两者貌似都有实现,有兴趣的朋友可以查一下相关资料。 joda-time guava range
参考资料 https://stackoverflow.com/questions/4387549/localdate-interval-in-joda-time https://www.codenong.com/325933/