1. 程式人生 > >java得出兩段時間重疊的天數,以及日期

java得出兩段時間重疊的天數,以及日期

出於專案需求,做排班需求,積累一點

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; }