個人メモjavaは、シフトプランに基づいて勤務時間(祝日、週末、休憩方式を除く)を算出します.
個人メモは、業務ニーズに応じて書かれた考え方です.検索された時間帯(date 1)にまたがるスケジュール(data)は、各スケジュールの開始時間と終了時間、および祝日(祝日の開始時間、終了時間)、休憩方式(単休、双休、無休)があるかどうかを巡ります.データ構造は以下の通りである:第一条:date 1の開始時間--data(0)のシフト終了時間の中間のシフト計画:data()のシフト開始時間--シフト終了時間最後のシフト計画:data(data.size)のシフト開始時間--date 1の終了時間データ構造を取得した後、各時間帯を休日時間帯と比較(祝日がある)し、両者の重複時間と土日の重複日数を算出します
/**
* /
* @param startDate 30
* @param endDate
* @param filter
* @return
* @throws DatasweepException
*/
private long getPlanTime(String startDate,String endDate,RunningStatusFilter filter) throws DatasweepException{
String key = null;
String startPlan = null;
String endPlan = null;
String startHoliday = null;
String endHoliday = null;
String weekendPlan = null;
long sumHoliday = 0;//
long sumDay = 0;
DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Map map = new HashMap();
try{
Vector data = filter.getPlanWorkTime(startDate,endDate);//
Date d1=sdf.parse(startDate);
Date d2=sdf.parse(endDate);
sumDay = (d2.getTime()-d1.getTime()+1000000)/(3600*24*1000);//
if(0!=data.size()&&null!=data)
{
for(int i =0;i dateUtils(String startPlans, String endPlans, String startHoliday, String endHoliday) throws ParseException{
Map map = new HashMap();
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())/(3600*24*1000))+1;//
map.put("reapertdays", reapertdays);
map.put("Ds1", ds1);
map.put("Ds2", ds2);
return map;
}
map.put("reapertdays", reapertdays);
return map;
}
/**
*
* @param startHoliday
* @param holiday
* @param restType 1: 2:
* @return
* @throws Exception
*/
private long isReapert(String startHoliday,long holiday,long restType) throws Exception{
long reatpertDay =0;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
int dayForWeek = 0;
if(holiday==1){// , ,
Calendar c = Calendar.getInstance();
c.setTime(format.parse(startHoliday));
if(c.get(Calendar.DAY_OF_WEEK) == 1){
dayForWeek = 7;
}else{
dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
}
if(restType==1){
if(dayForWeek==6||dayForWeek==7){
reatpertDay = 1;
}
}
if(restType==2){
if(dayForWeek==7){
reatpertDay = 1;
}
}
}else{
Calendar calendar = new GregorianCalendar();
for(int i=0;iEW)// ,
sunDay--;
}catch(Exception se){
se.printStackTrace();
}
return sunDay;
}
}