JAVA判断当前日期是否是工作日,还是节假日

在使用hutool工具包的时候,发现hutool工具包无法判断是否是工作日还是节假日(因为每年节假日各不相同,所以自己写了一个)
当前只有2021年的数据,后续的数据需要等国务院发布
节假日数据来源:国务院办公厅关于2021年部分节假日安排的通知

package cn.hjljy.crawler.demo.holiday;

import com.sun.org.apache.xpath.internal.operations.Bool;

import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 度假服务
 *
 * @author hjljy
 * @date 2021/07/27
 */
public class HolidayService {

    static List<String> holiday =new ArrayList<>();
    static List<String> extraWorkDay =new ArrayList<>();
    public static Boolean isWorkingDay(long time) {
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneOffset.of("+8"));
        String formatTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        initHoliday();
        initExtraWorkDay();
        //是否加班日
        if(extraWorkDay.contains(formatTime)){
            return true;
        }
        //是否节假日
        if(holiday.contains(formatTime)){
            return false;
        }
        //如果是1-5表示周一到周五  是工作日
        DayOfWeek week = dateTime.getDayOfWeek();
        if(week==DayOfWeek.SATURDAY||week==DayOfWeek.SUNDAY){
            return false;
        }
        return true;

    }

    public static void main(String[] args) {
        Boolean workingDay = isWorkingDay(System.currentTimeMillis());
        if(workingDay){
            System.out.println("工作日,加油,打工人");
        }else {
            System.out.println("开开心心过节,高高兴兴干饭!!!");
        }
    }
  
    /**
     *  初始化节假日
     */
    public static void initHoliday(){
        holiday.add("2021-01-01");
        holiday.add("2021-01-02");
        holiday.add("2021-01-03");
        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");
        holiday.add("2021-05-01");
        holiday.add("2021-05-02");
        holiday.add("2021-05-03");
        holiday.add("2021-05-04");
        holiday.add("2021-05-05");
        holiday.add("2021-06-12");
        holiday.add("2021-06-13");
        holiday.add("2021-06-14");
        holiday.add("2021-09-19");
        holiday.add("2021-09-20");
        holiday.add("2021-09-21");
        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");
    }
    /**
     *  初始化额外加班日
     */
    public static void initExtraWorkDay(){
        extraWorkDay.add("2021-02-07");
        extraWorkDay.add("2021-02-20");
        extraWorkDay.add("2021-04-25");
        extraWorkDay.add("2021-05-08");
        extraWorkDay.add("2021-09-18");
        extraWorkDay.add("2021-09-26");
        extraWorkDay.add("2021-10-09");
    }
}

不得不说hutool工具包还是很强大的,还能根据时间获取农历,获取属相,星座等等

 扫VX 领Java资料,前端,测试,python等等资料都有

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以通过判断日期是周末还是法定节假日判断当前日期工作日还是节假日判断日期是周末的方法: ```java public static boolean isWeekend(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int week = cal.get(Calendar.DAY_OF_WEEK) - 1; return week == 6 || week == 0; // 周六和周日返回true,其他返回false } ``` 判断日期是法定节假日的方法: ```java public static boolean isHoliday(Date date) { // 判断是否是元旦节 if (isSameDate(date, new Date(date.getYear(), 0, 1))) { return true; } // 判断是否是春节 int year = getYear(date); int springFestivalDate = LunarCalendar.getSpringFestivalDate(year); if (isSameDate(date, LunarCalendar.getSolarDate(year, 0, springFestivalDate))) { return true; } // 判断是否是清明节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 3, LunarCalendar.getQingMingDate(year)))) { return true; } // 判断是否是劳动节 if (isSameDate(date, new Date(date.getYear(), 4, 1)) || isSameDate(date, new Date(date.getYear(), 4, 2)) || isSameDate(date, new Date(date.getYear(), 4, 3))) { return true; } // 判断是否是端午节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 5, LunarCalendar.getDuanWuDate(year)))) { return true; } // 判断是否是中秋节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 8, LunarCalendar.getZhongQiuDate(year)))) { return true; } // 判断是否是国庆节 if (isSameDate(date, new Date(date.getYear(), 9, 1)) || isSameDate(date, new Date(date.getYear(), 9, 2)) || isSameDate(date, new Date(date.getYear(), 9, 3))) { return true; } return false; } public static boolean isSameDate(Date date1, Date date2) { return date1.getYear() == date2.getYear() && date1.getMonth() == date2.getMonth() && date1.getDate() == date2.getDate(); } public static int getYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); } ``` 以上代码中,`LunarCalendar`类是一个农历日历工具类,可用于计算农历节日的日期

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值