出于项目需求,做排班需求,积累一点
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 得出两个时间段重叠的天数以及日期
* @param startPlans 排班开始时间
* @param endPlans 排班结束时间
* @param startHoliday 假期开始时间
* @param endHoliday 假期结束时间
* @return
* @throws ParseException
*/
private Map<String,Object> dateUtils(String startPlans, String endPlans, String startHoliday, String endHoliday) throws ParseException{
Map<String,Object> map = new HashMap<String , Object>();
long reapertdays = 0;//重叠天数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 标准时间
Date bt = sdf.parse(startPlans);
Date ot = sdf.parse(endPlans);
// 目标时间
Date st = sdf.parse(startHoliday);
Date ed = sdf.parse(endHoliday);
long btlong = Math.min(bt.getTime(), ot.getTime());// 开始时间
long otlong = Math.max(bt.getTime(), ot.getTime());// 结束时间
long stlong = Math.min(st.getTime(), ed.getTime());// 开始时间
long edlong = Math.max(st.getTime(), ed.getTime());// 结束时间
if ((stlong >= btlong && stlong <= otlong) || (edlong >= btlong && edlong <= otlong)) {
// 一定有重叠部分
long sblong = stlong >= btlong ? stlong : btlong;
long eblong = otlong >= edlong ? edlong : otlong;
String sblongs = sdf.format(sblong);
String eblongs = sdf.format(eblong);
Date d1=sdf.parse(sblongs);
Date d2=sdf.parse(eblongs);
String ds1 = sdf.format(d1);
String ds2 = sdf.format(d2);
reapertdays=(d2.getTime()-d1.getTime()+1000000)/(3600*24*1000);//重叠天数
map.put("reapertdays", reapertdays);
map.put("Ds1", ds1);
map.put("Ds2", ds2);
return map;
}
map.put("reapertdays", reapertdays);
return map;
}