首页 > 代码库 > 工作经历时间段的比较

工作经历时间段的比较

采用一个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;
	}
		

}



如果有更高的算法的,可以贴出来分享。

工作经历时间段的比较