采用一个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;
}
}
如果有更高的算法的,可以贴出来分享。