使用Java根据自定义的假日日历计算下一个工作日

时间:2019-04-09 11:55:36

标签: java date calendar

我正在尝试通过基于数据库中的自定义假期日历添加特定天数来计算下一个工作日。

例如:
-今天:3月9日
-假期:3月10日,3月12日,3月13日
-添加天数:5

结果应该吸引我:第17场比赛

有没有简单的方法可以在Java中处理此问题?

我写了以下代码

public class TestNextWorkinDay {

    public static void main(String[] args) throws ParseException {
        // TODO Auto-generated method stub
        TestNextWorkinDay d = new TestNextWorkinDay();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date fDate = sdf.parse("2019-04-09");

        //adding holidays to List
        String date1="2019-04-10";
        String date2="2019-04-12";
        String date3="2019-04-13";

        ArrayList<String> dates = new ArrayList<>();
        dates.add(date1);
        dates.add(date2); 
        dates.add(date3);
        String dueDate = d.getNextWorkingDay(fDate ,5, dates);
        System.out.println("due Date " + dueDate);
    }


    public String getNextWorkingDay(Date fDate,int bday , ArrayList<String> dates){
        Calendar cal = Calendar.getInstance();
        cal.setTime(fDate);
        SimpleDateFormat fdate = new SimpleDateFormat("yyyy-MM-dd");
        while(bday > 0){
            cal.add(Calendar.DAY_OF_MONTH, 1);
           String date= fdate.format(cal.getTime());
            if(checkIfNonWorkingDay(date , dates)){
                bday--;
            }
        }
        return fdate.format(cal.getTime());
    }

    public boolean checkIfNonWorkingDay(String cal , ArrayList<String> dates){

        if(dates.contains(cal)){
            return false;
        }
        return true;
    }





}

1 个答案:

答案 0 :(得分:0)

Working Days in a Month

如果您具有这样的自定义表格设计(2019年3月)。

  1. 将月份数据保存在数据结构中。
  2. 从当天(即3月9日)开始添加下一个工作日(标记为1)。第五个工作日的索引应为您提供每月的某天。