java除去假日、串休并显示工作日

小白一枚。欢迎讨论

一、首先:创建数据库,结构如下

 

 解释:flag字段:0表示所有假日,1表示串休,所有falg=1的start_time都是周六或者周日

二、实体类

三、mapper

@Mapper
public interface DueDateMapper {
    List<Duedate> getDueDateList();
    List<Duedate> getList();
}


四、.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.aexit.construct.acceptance.websky.sysmgr.duedate.mapper.DueDateMapper">

    <select id="getDueDateList" resultType="net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate">
        SELECT a.start_time,a.flag FROM act_hi_duedate a


    </select>
    <select id="getList" resultType="net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate">
        SELECT a.start_time,a.flag FROM act_hi_duedate a where a.flag='1'


    </select>


</mapper>

五、service

@Service
public class DueDateService {
    @Resource
    private DueDateMapper dueDateMapper;


    public List<Duedate> getDueDateList(){

        return dueDateMapper.getDueDateList();
    }

    public List<Duedate> getList(){
        return dueDateMapper.getList();
    }
}

六、util

package net.aexit.construct.acceptance.websky.sysmgr.duedate.util;

import net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class HolidayUtils {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * 获取计划激活日期
     * @param today opening date
     * @param list 假期
     * @param listbyflag 串休
     * @param holidayList 工作日
     * @param num num个工作日后
     * @return
     * @throws
     */
    public static List getScheduleActiveDate(Date today, List<Duedate> list,List<Duedate> listbyflag, int num) throws ParseException {
        List<String> holidayList = new ArrayList();
        Date tomorrow = null;
        int delay = 1;
        while(delay <= num){
            tomorrow = getTomorrow(today);
            //当前日期+1,判断是否是节假日,不是的同时要判断是否是周末,都不是则scheduleActiveDate日期+1
            if((!isWeekend(sdf.format(tomorrow)) && !isHoliday(sdf.format(tomorrow),list)) || (isrest(sdf.format(tomorrow),listbyflag)) ){
                delay++;

                holidayList.add(sdf.format(tomorrow));
            }
            today = tomorrow;
        }

        return holidayList;
    }

    /**
     * 获取tomorrow的日期
     *
     * @param date
     * @return
     */
    public static Date getTomorrow(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, +1);
        date = calendar.getTime();
        return date;
    }

    /**
     * 判断是否是weekend
     *
     * @param sdate
     * @return
     * @throws ParseException
     */
    public static boolean isWeekend(String sdate) throws ParseException {
        Date date = sdf.parse(sdate);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
            return true;
        } else{
            return false;
        }

    }

    /**
     * 判断是否是holiday
     *
     * @param sdate
     * @param list
     * @return
     * @throws ParseException
     */
    public static boolean isHoliday(String sdate, List<Duedate> list) throws ParseException {
        if(list.size() > 0){
            for(Duedate l:list){
                if(sdate.equals(l.getStartTime()) && l.getFlag().equals("0")){
                    return true;
                }
            }
        }
        return false;
    }

/**
 * 判断是否是串休
 *
 * @param
 * @param
 * @return
 * @throws ParseException
 */

    public static boolean isrest(String sdate,List<Duedate> listbyflag) throws ParseException{

        if(listbyflag.size() > 0){
            for(Duedate l:listbyflag){
                    if(sdate.equals(l.getStartTime())){
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * 获取N个工作日后的日期
     * @param today opening date
     * @param list holidayList
     * @param num num个工作日后
     * @return
     * @throws
     */
    public static List getNWorkDate(Date today, List<Duedate> list,List<Duedate> listbyflag, int num) throws ParseException {
        List<Date> holidayList = new ArrayList();
        Date tomorrow = null;
        int delay = 1;
        while(delay <= num){
            tomorrow = getTomorrow(today);
            //当前日期+1,判断是否是节假日,不是的同时要判断是否是周末,都不是则scheduleActiveDate日期+1
            if((!isWeekend(sdf.format(tomorrow)) && !isHoliday(sdf.format(tomorrow),list)) || (isrest(sdf.format(tomorrow),listbyflag)) ){
                delay++;

                holidayList.add(tomorrow);
            }
            today = tomorrow;
        }

        return holidayList;
    }
}

七、controller


@Controller
@RequestMapping(value = "/getTime")
public class DueDateController {
    @Resource
    private DueDateService dueDateService;

    @RequestMapping(value = "/time/{num}")
    @ResponseBody
    public List dueDateList(@PathVariable int num) throws ParseException {

        List<Duedate> list = dueDateService.getDueDateList();
        List<Duedate> listbyflag = dueDateService.getList();
        Date date = new Date();

        List datelist =HolidayUtils.getScheduleActiveDate(date,list,listbyflag,num);

        return datelist;
    }

}

参考:

http://www.cnblogs.com/yadongliang/p/9549349.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值