关于请假天数 的算法

请假情景

请假分为:  上午请假,下午请假

消假也分为:上午消假,下午消假

请假最小单位 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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值