JAVA_判断日期是否为工作日(排除节假日和调整周末上班)

java判断日期是否为工作日(排除节假日和调整周末上班)

判断当前日期是否为工作日,包括判断是否周末,是否节假日,是否周末调整上班。

判断是否周末,我们可以通过java方法就可以实现,但是判断是否节假日和,调整的周末上班,这个就需要我们自己去维护了。

搞2个集合,分别来存节假日和调整上班的日期。

public class CalendarTest {
    //节假日列表
    private static List<Calendar> holidayList = new ArrayList<Calendar>();  
    //周末为工作日
    private static List<Calendar> weekendList = new ArrayList<Calendar>();
    /** 
     * @param args
     * return void    返回类型 
     * throws 
     */
    public static void main(String[] args) {
        try {

            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar ca = Calendar.getInstance();
            Date d = df.parse("2016-09-15");
            ca.setTime(d);//设置当前时间

            CalendarTest ct = new CalendarTest();
            ct.initHolidayList("2016-09-15");//初始节假日
            ct.initHolidayList("2016-09-16");//初始节假日
            ct.initHolidayList("2016-09-17");//初始节假日

            ct.initWeekendList("2016-09-18");//初始周末为工作日

            boolean k = checkHoliday(ca);
            System.out.println(k);

        } catch ( Exception e) {
            // TODO: handle exception
            System.out.println(e.getClass());
            e.printStackTrace();
        }

    }




     /**
      * 
      * 验证日期是否是节假日
      * @param calendar  传入需要验证的日期
      * @return 
      * return boolean    返回类型  返回true是节假日,返回false不是节假日
      * throws 
      */
     public static boolean checkHoliday(Calendar calendar) throws Exception{

         //判断日期是否是周六周日
         if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || 
                 calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){

            //判断日期是否是节假日
             for (Calendar ca : weekendList) {
                if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&
                        ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&
                        ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){
                    return false;
                }
            }

             return true;
         }
         //判断日期是否是节假日
         for (Calendar ca : holidayList) {
            if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&
                    ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&
                    ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){
                return true;
            }
        }

         return false;
     }

     /**
      * 
      * 把所有节假日放入list
      * @param date  从数据库查 查出来的格式2016-05-09
      * return void    返回类型 
      * throws 
      */
    public void initHolidayList(String date){

            String [] da = date.split("-");

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));
            calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月
            calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));
            holidayList.add(calendar);
    }

    /**
     * 初始化周末被调整为工作日的数据
     */
    public void initWeekendList(String date){
        String [] da = date.split("-");

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));
        calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月
        calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));
        weekendList.add(calendar);
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Java 计算两个日期之间的工作日排除法定节假日周末,包含调休工作日)的示例代码: ```java import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; public class WorkingDaysCalculator { public static long getWorkingDays(LocalDate startDate, LocalDate endDate, List<LocalDate> holidays, List<LocalDate> workingDays) { long workingDaysCount = 0; LocalDate date = startDate; while (date.isBefore(endDate)) { if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY && !holidays.contains(date)) { workingDaysCount++; } else if (workingDays.contains(date)) { workingDaysCount++; } date = date.plus(1, ChronoUnit.DAYS); } return workingDaysCount; } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 1, 1); LocalDate endDate = LocalDate.of(2021, 1, 31); List<LocalDate> holidays = new ArrayList<>(); holidays.add(LocalDate.of(2021, 1, 1)); holidays.add(LocalDate.of(2021, 1, 6)); holidays.add(LocalDate.of(2021, 1, 20)); List<LocalDate> workingDays = new ArrayList<>(); workingDays.add(LocalDate.of(2021, 1, 2)); workingDays.add(LocalDate.of(2021, 1, 3)); long workingDaysCount = getWorkingDays(startDate, endDate, holidays, workingDays); System.out.println("Number of working days between " + startDate + " and " + endDate + ": " + workingDaysCount); } } ``` 与前面的示例相比,这个示例增加了一个 `List<LocalDate> workingDays` 参数来表示调休工作日日期。在 `getWorkingDays` 方法中,我们使用 `while` 循环遍历两个日期之间的每一天,并使用 `getDayOfWeek` 方法来判断一周中的哪一天。如果这一天不是周六或周日,且不是法定节假日,则将其计为工作日;如果这一天是调休工作日,则也计为工作日。最终,我们将工作日数作为方法的返回值,并在 `main` 方法中打印出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值