java 查询指定月份的工作日(不包括法定节假日)

时间:2024-02-23 21:51:53
/**
 *  日期工具类  用于获取指定月份的工作日(除去周末和法定节假日)
 */
public class DateUtils {
    public static void main(String[] args) {
        // 获取工作日集合(排除周末)
        List<Date> workDays = getWorkDays(2020, 4);
        // 获取工作日字符串集合
        List<String> dateString = getDateString(workDays);
        // 获取法定节假日集合
        List<String> holidays = getHolidays();
        // 从工作日中除去法定节假日
        dateString.removeAll(holidays);
        
        System.out.println(dateString.size());
        // 遍历纯工作日集合
        for (String date : dateString){
             System.out.println(date);
        }
    }
    // 返回工作日集合,只排除周末
    public static List<Date> getWorkDays(int year, int month){
        // 用于储存每月工作日
       List<Date> dates = new ArrayList<Date>();

       Calendar cal = Calendar.getInstance();
       //设置月份
       cal.set(Calendar.YEAR, year);
       // 设置月份
       cal.set(Calendar.MONTH, month - 1);
       // 设置为当月第一天
       cal.set(Calendar.DATE, 1);


       while(cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) < month){
           // 判断当前天为本周的第几天
           int day = cal.get(Calendar.DAY_OF_WEEK);
           // 如果不为周六或者周天,将日期进行储存
           if(!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)){
               dates.add((Date)cal.getTime().clone());
           }
           // 将当前日期增加一天
           cal.add(Calendar.DATE, 1);
       }
       // 返回当前月工作日集合
       return dates;


    }

    /**
     *
     * @param dateList
     * @return 返回日期字符串集合
     */
    public static List<String> getDateString(List<Date> dateList){
        // 储存日期字符串
        List<String> dateString = new ArrayList<>();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        for (Date date : dateList){
            String date2 = simpleDateFormat.format(date);
            dateString.add(date2);

        }
        return dateString;
    }

    /**
     *
     * @return 返回法定节假日集合
     */
    public static List<String> getHolidays(){
        List<String> holidays = new ArrayList<>();
        holidays.add("2019-01-01");
        holidays.add("2019-01-14");
        holidays.add("2019-02-11");
        holidays.add("2019-03-21");
        holidays.add("2019-04-29");
        holidays.add("2019-04-30");
        holidays.add("2019-05-01");
        holidays.add("2019-05-02");
        holidays.add("2019-05-03");
        holidays.add("2019-05-04");
        holidays.add("2019-05-05");
        holidays.add("2019-05-06");
        holidays.add("2019-07-15");
        holidays.add("2019-08-11");
        holidays.add("2019-08-12");
        holidays.add("2019-09-16");
        holidays.add("2019-09-23");
        holidays.add("2019-10-14");
        holidays.add("2019-10-22");
        holidays.add("2019-11-03");
        holidays.add("2019-11-04");
        holidays.add("2019-11-23");
        return holidays;
    }
}