计算指定时间间隔前的工作日时间点,其中的工作时间单独配置管理。
/**
* 计算指定间隔时间(分钟)之前的工作时间,前提是传入的当前日期是工作日
* 是否工作日由其它办法验证
* @param limit 时隔时间(小时)
* @return 返回工作日的一个时间点
*/
public Date befor(int limitMinue,Calendar cur){
WorkTime morningSession = workTimeService.getMorningSession();//工作日的上午
WorkTime afternoonSession = workTimeService.getAfternoonSession();//工作日的下午
int minues = cur.get(Calendar.HOUR_OF_DAY) * 60 + cur.get(Calendar.MINUTE);//当前时间
if(minues < morningSession.getStartTime()
|| (minues >= morningSession.getEndTime() && minues < afternoonSession.getStartTime())
|| minues > afternoonSession.getEndTime()){
//如果不在工作时间直接退出
return null;
}else{
if(minues > afternoonSession.getStartTime()){//当前时间是下午
int aftDur = minues - afternoonSession.getStartTime();//当前时间减去下午工作开始时间
if(aftDur >= limitMinue){//剩余时间如果大于等于间隔时间表示还在下午工作时间
//标记点在下午
return computTime(cur,minues - limitMinue);
}else{//当前时间减去间隔时间后时间点在上午
//标记点在上午
limitMinue -= aftDur;//减去下午时长
if(morningSession.duration() >= limitMinue){
//上午时间足够
return computTime(cur,morningSession.getEndTime() - limitMinue);
}else{
//如果上午时长不够,还要计算前一天时间
limitMinue -= morningSession.duration();//减去今天的时间
return preDay(cur, morningSession, afternoonSession,limitMinue);//计算前一天
}
}
}else{//当前时间是上午
int morDur = minues - morningSession.getStartTime();
if(morDur >= limitMinue){
//上午时间足够
return computTime(cur,minues - limitMinue);
}else{
limitMinue -= morDur;
return preDay(cur, morningSession, afternoonSession,limitMinue);//计算前一天
}
}
}
}
/**
* 获取前一天时间点
* @param cur
* @param morningSession
* @param afternoonSession
* @param limitMinue
* @return
*/
private Date preDay(Calendar cur, WorkTime morningSession, WorkTime afternoonSession, int limitMinue) {
int startMinue = 0;
if(afternoonSession.duration() >= limitMinue){
startMinue = afternoonSession.getEndTime() - limitMinue;
}else{
startMinue = morningSession.getEndTime() - (limitMinue - afternoonSession.duration());
}
while(true){
cur.add(Calendar.DAY_OF_MONTH, -1);
if(timeService.isWorkday(cur.getTime())){
//如果是工作日退出循环
break;
}
}
return computTime(cur,startMinue);
}
private Date computTime(Calendar date,int minues){
int houre = minues / 60;
int minue = minues % 60;
date.set(Calendar.HOUR_OF_DAY, houre);
date.set(Calendar.MINUTE, minue);
return date.getTime();
}