欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java通过月份获取当月工作日

程序员文章站 2022-05-17 21:37:24
...

因国家每年国定假日不确定,在开发中碰到需要获取日期是否为节假日的情况,若不考虑公司定制的假日判断,可以通过调用api接口,来判断该天是否为节假日


    /** 判断该日期是否为节假日
     * 
     * @param date 1,正常工作日  2,节假日 3,节假日后补班 4,周末
     * @return
     */
public static int getIfHoliday(String date){
    	int flag=1;
    	try {
            Map<String, Object> map = http://timor.tech/api/holiday/ + date, Map.class);
            if (map.get("holiday") == null) {
                flag = 1;
            } else {
                Map<String, Object> holidayDO = (Map) map.get("holiday");
                Boolean object = (Boolean) holidayDO.get("holiday");
                if (object) {
                    flag = 2;//节假日
                } else {
                    flag = 3;//节假日补班
                }
            }
            LocalDate localDate = LocalDate.parse(date);
            int value = localDate.getDayOfWeek().getValue();
            if(value==6 ||value==7){
            	if(flag!=3){//如果不是节假日补班情况,则返回周末
            		flag=4;//周末
            	}
            }
        }catch (Exception e){
    	    e.printStackTrace();
    	    logger.info("获取是否工作日异常.",e);
        }
    	return flag;
    }

通过年份和月份来获取该月所有的工作日集合

 /**
     * 获取当月的所有工作日
     * @param year
     * @param month
     * @return
     */
    public static List<String> getWolkdayInMonth(int year, int month) {
        List<String> list = new ArrayList<String>();
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);// 不设置的话默认为当年
        calendar.set(Calendar.MONTH, month - 1);// 设置月份
        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为当月第一天
        int daySize = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);// 当月最大天数
        for (int i = 0; i < daySize; i++) {
        	String format = DateUtils.format(calendar.getTime(),"yyyy-MM-dd");
        	int ifHoliday = getIfHoliday(format);
        	if(ifHoliday!=2){
	            int week = calendar.get(Calendar.DAY_OF_WEEK);
	            //周末休息
	            if ((week == Calendar.SATURDAY || week == Calendar.SUNDAY)) {// 1代表周日,7代表周六 判断这是一个星期的第几天从而判断是否是周末
	            	//如果是补班,则属于正常上班时间
	            	if(ifHoliday==3){
	            		list.add(year+"-"+month+"-"+calendar.get(Calendar.DAY_OF_MONTH));
	            	}
	            }else{
	            	// 得到当天是一个月的第几天
	            	list.add(year+"-"+month+"-"+calendar.get(Calendar.DAY_OF_MONTH));
	            }

        	}
    		calendar.add(Calendar.DATE, 1);//在第一天的基础上加1

        }
        return list;
    }