采用一个POJO类,用来存放时间段对象。
package com; import java.util.Date; public class TimeStore { public TimeStore() { } public TimeStore(Date startDate,Date endDate) { this.startDate = startDate; this.endDate = endDate; } /** * 开始时间 */ private Date startDate; /** * 结束时间 */ private Date endDate; public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } }
接下来,是最主要的用来比较时间段是否重合的部分。
package com; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 比较时间段是否重合 * @author w.s * */ public class DateDiffCompare { public static List<TimeStore> timeStoreList = new ArrayList<TimeStore>(); public static void main(String[] args) { // Date startDate1 = formatDate("2011/5"); // Date endDate1 = formatDate("2012/5"); // // Date startDate2 = formatDate("2013/4"); // Date endDate2 = formatDate("2014/5"); // // System.out.println(judgeIsRightfulInline(startDate1, endDate1, startDate2, endDate2)); timeStoreList.add(new TimeStore(formatDate("2011/5"), formatDate("2012/5"))); timeStoreList.add(new TimeStore(formatDate("2013/4"), formatDate("2014/5"))); Date startDate = formatDate("2012/6"); Date endDate = formatDate("2013/3"); System.out.println(judgeDateDiffIsRightInTimeQueue(startDate, endDate)); } /** * 判断当前时间段是否在历史时间队列中 * @param startDate * @param endDate * @return */ public static boolean judgeDateDiffIsRightInTimeQueue(Date startDate,Date endDate){ boolean result = true; for (TimeStore timeStore : timeStoreList) { result = judgeIsRightfulInline(startDate, endDate, timeStore.getStartDate(), timeStore.getEndDate()); if(result==false){ break; } } return result; } /** * 判断两段日期之间是否有交叉 * @param startDate1 * @param endDate1 * @param startDate2 * @param endDate2 * @return */ public static boolean judgeIsRightfulInline(Date startDate1,Date endDate1,Date startDate2,Date endDate2){ /** * 第一段工作经历开始时间和结束时间不正确 */ if(startDate1.after(endDate1)){ return false; } /** * 第二段工作经历开始和结束时间不正确 */ if(startDate2.after(endDate2)){ return false; } /** * 第二段工作经历在第一段工作经历之前 */ if(startDate1.after(startDate2) && startDate1.after(endDate2)){ return true; /** * 第二段工作经历和第一段工作经历前交叉 */ }else if(startDate1.after(startDate2) && startDate1.before(endDate2)){ return false; /** * 第二段工作经历在第一段工作经历之间 */ }else if(startDate1.before(startDate2) && endDate2.before(endDate1)){ return false; /** * 第二段工作经历和第一段工作经历后交叉 */ }else if(startDate2.before(endDate1) && endDate2.after(endDate1)){ return false; /** * 第二段工作经历在第一段工作经历之后 */ }else if(startDate2.after(endDate1) && endDate2.after(endDate1)){ return true; }else if(startDate2.before(startDate1) && endDate2.after(endDate1)){ return false; }else{ System.out.println("如果存在时间段相等的情况(开始和结束时间点相同),则这里默认返回false."); return false ; } } public static SimpleDateFormat formatDate = new SimpleDateFormat("yyyy/MM"); /** * 获取日期对象 * @param str * @return */ public static Date formatDate(String str){ try { return formatDate.parse(str); } catch (Exception e) { e.printStackTrace(); } return null; } }
如果有更高的算法的,可以贴出来分享。
时间: 2024-10-17 14:28:33