请假情景
请假分为: 上午请假,下午请假
消假也分为:上午消假,下午消假
请假最小单位 0.5天
ps:2019-3-10下午请假 2019-3-11上午消假
请假时长 为 0.5天
红色区域表示请假天数和消假天数的 差值 。
从图中可以看出来,除公共部分外,每次都只剩下上午和下午。
思路:只要判断上午是否请假,若上午请假,则天数加0.5.
和判断下午是否消假。若下午消假,则天数加0.5.
公式:差值 加上 是否加上半天,或下半天。
有个特殊情况,在同一天的情况下,下午请假,上午消假。此时本身是一种不合理的情况,请假时长为0.
public static VacateBean getVacateDays(VacateBean vacateBean){
Calendar calendar = Calendar.getInstance();
calendar.setTime(vacateBean.getStartTime());
List list = new ArrayList();
while(calendar.getTime().before(vacateBean.getEndTime())){
list.add(DateUtil.getYMD().format(calendar.getTime()));
calendar.add(Calendar.DAY_OF_MONTH,1);
}
double count = 0;
//如果上午请假,天数加0.5
if(vacateBean.getStartDayStatus()==1){
count+=0.5;
}
//如果下午消假,天数加0.5
if(vacateBean.getEndDayStatus()==2){
count+=0.5;
}
count+=list.size();
vacateBean.setDay(count);
return vacateBean;
}
/**
* 装饰 请假具体时间,请假,消假设置成整点
* @param startTime
* @param endTime
* @param startDayStatus
* @param endStatus
* @return
*/
public static Map buildHours(Date startTime, Date endTime, Integer startDayStatus, Integer endStatus){
Map map = new HashMap();
String start = DateUtil.getYMD().format(startTime);
String end = DateUtil.getYMD().format(endTime);
if(endStatus==1){
end+=" 12:00:00";
}else if(endStatus==2){
end+=" 18:00:00";
}
try {
Date startDate = DateUtil.getYMDHms().parse(start);
Date endDate = DateUtil.getYMDHms().parse(end);
map.put("startDate",startDate);
map.put("endDate",endDate);
} catch (ParseException e) {
e.printStackTrace();
}
if(startDayStatus==1){
start+=" 09:00:00";
}else if(startDayStatus==2){
start+=" 14:00:00";
}
return map;
}