📄 defaultcalendarservice.java.svn-base
字号:
return 0; }//判断date属于哪个时间段 SimpleDateFormat dFormat = new SimpleDateFormat(this.businessCalendarProperties.getProperty(hour_format)); String paramTimeStr = dFormat.format(date); StringTokenizer stringTokenizer = new StringTokenizer(businessTime, "&"); List timeSpanList = new ArrayList(); while (stringTokenizer.hasMoreTokens()) { String timeSpan = stringTokenizer.nextToken(); int isInTheSpan = testTimeInTheTimeSpan(date, timeSpan); if (isInTheSpan == -1) { timeSpanList.add(timeSpan); } else if (isInTheSpan == 0) { String tmp = paramTimeStr + timeSpan.substring(timeSpan.indexOf("-")); timeSpanList.add(tmp); } } int totalTime = 0; for (int i = 0; i < timeSpanList.size(); i++) { String timeSpan = (String) timeSpanList.get(i); totalTime = totalTime + getTotalWorkingTime(timeSpan); } return totalTime; } /** * 检查时间点是否在给定的区间内 * @param timeStr * @param timeSpan * @return 0-在给定的区间内,-1在给定的区间前,1在给定的区间后 */ private int testTimeInTheTimeSpan(Date d, String timeSpan) { SimpleDateFormat dFormat = new SimpleDateFormat(this.businessCalendarProperties.getProperty(day_format)); String dayStr = dFormat.format(d); dFormat.applyPattern(this.businessCalendarProperties.getProperty(day_format) + " " + this.businessCalendarProperties.getProperty(hour_format)); int idx = timeSpan.indexOf("-"); String date1Str = dayStr + " " + timeSpan.substring(0, idx); String date2Str = dayStr + " " + timeSpan.substring(idx + 1); Date date1 = null; Date date2 = null; try { date2 = dFormat.parse(date2Str); } catch (ParseException ex) { Logger.getLogger(DefaultCalendarService.class.getName()).log(Level.SEVERE, null, ex); } try { date1 = dFormat.parse(date1Str); } catch (ParseException ex) { Logger.getLogger(DefaultCalendarService.class.getName()).log(Level.SEVERE, null, ex); } if (d.before(date1)) { return -1; } else if (d.after(date2)) { return 1; } return 0; } private String getBusinessTime(Date date) { String businessTime = this.businessCalendarProperties.getProperty(business_time); Calendar cal = Calendar.getInstance(); cal.setTime(date); String businessTime2 = null; int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); switch (dayOfWeek) { case 1: businessTime2 = this.businessCalendarProperties.getProperty(business_time_sunday);//周日 break; case 2: businessTime2 = this.businessCalendarProperties.getProperty(business_time_monday);//周1 break; case 3: businessTime2 = this.businessCalendarProperties.getProperty(business_time_tuesday);//周2 break; case 4: businessTime2 = this.businessCalendarProperties.getProperty(business_time_wednesday);//周3 break; case 5: businessTime2 = this.businessCalendarProperties.getProperty(business_time_thursday);//周4 break; case 6: businessTime2 = this.businessCalendarProperties.getProperty(business_time_friday);//周5 break; case 7: businessTime2 = this.businessCalendarProperties.getProperty(business_time_saturday);//周六 break; } if (businessTime2 != null) { businessTime = businessTime2; } return businessTime; } /** * 获得时间段的工作时间,以毫秒表示 * @param timeSpan 例如:8:30-12:00 * @return */ private int getTotalWorkingTime(String timeSpan) { if (timeSpan == null) { return 0; } StringTokenizer stringTokenizer = new StringTokenizer(timeSpan, "-"); String dStr1 = null; String dStr2 = null; if (stringTokenizer.hasMoreTokens()) { dStr1 = stringTokenizer.nextToken(); } if (stringTokenizer.hasMoreTokens()) { dStr2 = stringTokenizer.nextToken(); } if (dStr1 == null || dStr2 == null) { return 0; } SimpleDateFormat dFormat = new SimpleDateFormat(this.businessCalendarProperties.getProperty(hour_format)); Date d1 = null; try { d1 = dFormat.parse(dStr1); } catch (ParseException ex) { Logger.getLogger(DefaultCalendarService.class.getName()).log(Level.SEVERE, null, ex); } Date d2 = null; try { d2 = dFormat.parse(dStr2); } catch (ParseException ex) { Logger.getLogger(DefaultCalendarService.class.getName()).log(Level.SEVERE, null, ex); } if (d1 == null || d2 == null) { return 0; } return (int) (d2.getTime() - d1.getTime()); }// private int getDurationInMilliseconds /** * 缺省实现,周六周日都是非工作日,其他的都为工作日。 * 实际应用中,可以在数据库中建立一张非工作日表,将周末以及法定节假日录入其中, * 然后在该方法中读该表的数据来判断工作日和非工作日。 * @param d * @return */ public boolean isBusinessDay(Date d) { if (d == null) { return false; } Calendar cal = Calendar.getInstance(); cal.setTime(d); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == 1 || dayOfWeek == 7) { return false; } return true; } public Properties getBusinessCalendarProperties() { return businessCalendarProperties; } /** * 在外部定义的属性被合并到缺省定义中,这样的话外部之需要修改部分属性即可。 * @param props */ public void setBusinessCalendarProperties(Properties props) { this.businessCalendarProperties.putAll(props); } public Date getSysDate() { return new Date(); } public void setRuntimeContext(RuntimeContext ctx) { this.rtCtx = ctx; } public RuntimeContext getRuntimeContext(){ return this.rtCtx; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -