個人メモ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;
      } 
}