设置某年假期,输出这一年是否是工作日

百度国务院发布的这一年假期安排
http://www.gov.cn/zhengce/content/2020-11/25/content_5564127.htm
在这里插入图片描述

package JavaTime;

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

public class WeekDays2021 {
    //内部类
    public static class Day{
        //日期
        private String dayStr;
        //类型 0代表上班 1周末休息 2节假日
        private Integer type;

        public String getDayStr() {
            return dayStr;
        }

        public void setDayStr(String dayStr) {
            this.dayStr = dayStr;
        }

        public Integer getType() {
            return type;
        }

        public void setType(Integer type) {
            this.type = type;
        }
    }

    /**
     * 获取某年内工作日、休息日、节假日
     *
     * @param year
     * @return
     */
    private static List<WorkDayUntil.Day> getDates(int year, List<String> holiday, List<String> makeWork) {
        List<WorkDayUntil.Day> dates = new ArrayList<WorkDayUntil.Day>();
        //日期格式化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        for (int i = 1; i <= 12; i++){
            //Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,
            // 创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, i - 1);
            cal.set(Calendar.DATE, 1);
            while (cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) < i) {
                int day = cal.get(Calendar.DAY_OF_WEEK);

                if ((day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
                    Date work = (Date) cal.getTime().clone();//复制一个相同的对象
                    WorkDayUntil.Day day1 = new WorkDayUntil.Day();
                    day1.setDayStr(sdf.format(work));
                    day1.setType(1);    //休息日,先把所有的周六,周日设置为休息日
                    //遍历传入的holiday,和所有的周六周日 对比,找出节假日
                    for (String hstr:holiday) {
                        if(hstr.equals(sdf.format(work))){
                            day1.setType(2);    //节假日
                        }
                    }
                    //遍历传入的调休工作日,把对应的周六,周日设为工作日
                    for (String wStr:makeWork) {
                        if(wStr.equals(sdf.format(work))){
                            day1.setType(0);    //补班
                        }
                    }

                    dates.add(day1);
                }
                //所有的周一到周五
                else{
                    Date  work = (Date) cal.getTime().clone();
                    WorkDayUntil.Day day1 = new WorkDayUntil.Day();
                    //先把所有的周一到周五设置为工作日
                    day1.setDayStr(sdf.format(work));
                    day1.setType(0);
                    for (String hstr:holiday) {
                        if(hstr.equals(sdf.format(work))){
                            day1.setType(2);
                        }
                    }
                    dates.add(day1);
                }
                cal.add(Calendar.DATE, 1);//日期加1,下一天的循环
            }
        }

        return dates;

    }

    public static void main(String[] args) {
        //节假日
        List<String> holiday = new ArrayList<>();
        //补班
        List<String> makeWork = new ArrayList<>();

        //元旦
        holiday.add("2021-01-01");
        holiday.add("2021-01-02");
        holiday.add("2021-01-031");
        //春节
        makeWork.add("2021-02-07");
        makeWork.add("2021-02-20");
        holiday.add("2021-02-11");
        holiday.add("2021-02-12");
        holiday.add("2021-02-13");
        holiday.add("2021-02-14");
        holiday.add("2021-02-15");
        holiday.add("2021-02-16");
        holiday.add("2021-02-17");

        //清明
        holiday.add("2021-04-03");
        holiday.add("2021-04-04");
        holiday.add("2021-04-05");

        //五一
        makeWork.add("2021-04-25");
        holiday.add("2021-05-01");
        holiday.add("20201-05-02");
        holiday.add("2021-05-03");
        holiday.add("2021-05-04");
        holiday.add("2021-05-05");
        makeWork.add("2021-05-08");
        //端午节
        holiday.add("2021-06-12");
        holiday.add("2021-06-13");
        holiday.add("2021-06-14");
        //中秋
        makeWork.add("2021-09-18");
        holiday.add("2021-09-19");
        holiday.add("2021-09-20");
        holiday.add("2021-09-21");

        //十一
        makeWork.add("2021-09-26");
        holiday.add("2021-10-01");
        holiday.add("2021-10-02");
        holiday.add("2021-10-03");
        holiday.add("2021-10-04");
        holiday.add("2021-10-05");
        holiday.add("2021-10-06");
        holiday.add("2021-10-07");
        makeWork.add("2021-10-09");

        //生成工作日、周末、节假日
        List<WorkDayUntil.Day> dates = getDates(2020,holiday,makeWork);
        dates.forEach(day -> {
            System.out.println(day.getDayStr()+" "+day.getType());
        });
//            System.out.println(dates);
//            String s = JSON.toJSONString(dates);
//            System.out.println(s);

    }


}

转自https://blog.csdn.net/hanxiaotao123/article/details/110477057?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=2

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值