java得出兩段時間重疊的天數,以及日期
阿新 • • 發佈:2018-12-19
出於專案需求,做排班需求,積累一點
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;
}