HolidayOrWork.java 3.94 KB
package com.lhcredit.common.utils;

import java.text.ParseException;
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;

public class HolidayOrWork {

    public  static Boolean isWorkingDay(long time, List extraWorkDay,List holiday) {
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneOffset.of("+8"));
        String formatTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        //是否加班日
        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 Date getWorkDay(String date,int days,String workStr,String holidayStr)  {
        String[] holidays=holidayStr.toString().split(",");
        String[] workdays=workStr.split(",");
        List holiday=new ArrayList();
        List extraWorkDay=new ArrayList();
        for(int k=0;k<holidays.length;k++){
            holiday.add(holidays[k].trim());
        }
        for(int o=0;o<workdays.length;o++){
            extraWorkDay.add(workdays[o].trim());
        }
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date d= null;
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        Boolean workingDay = isWorkingDay(d.getTime(),extraWorkDay,holiday);
        Date sday=null;

        //判断行政决定日是否为工作日
        if(workingDay){
//            System.out.println("工作日");
            //行政决定日 + 6个工作日
            int k=1;
            int j=1;
            while(true){
                Calendar c = Calendar.getInstance();
                c.setTime(d);
                c.add(Calendar.DATE, j);
                Date day=c.getTime();
                Boolean b=isWorkingDay(day.getTime(),extraWorkDay,holiday);
                if(k==days){
                    if(b){
                        sday=day;
                        break;
                    }
                }
                if(b){
                    k++;
                }
                j++;
            }
        }else {
//           System.out.println("开开心心过节!!!");
            //行政决定日 + 7个工作日
            int k=1;
            int j=1;
            while(true){
                Calendar c = Calendar.getInstance();
                c.setTime(d);
                c.add(Calendar.DATE, j);
                Date day=c.getTime();
                Boolean b=isWorkingDay(day.getTime(),extraWorkDay,holiday);
                if(k==days){
                    if(b){
                        sday=day;
                        break;
                    }
                }
                if(b){
                    k++;
                }
                j++;
            }
        }
        return sday;
    }


    public static void main(String[] args) throws ParseException {
        String holidayStr="2024-01-01,2024-02-10,2024-02-11,2024-02-12,2024-02-13,2024-02-14,2024-02-15,2024-02-16,2024-02-17,2024-04-04,2024-04-05,2024-04-06,2024-05-01,2024-05-02,2024-05-03,2024-05-04,2024-05-05,2024-06-08,2024-06-09,2024-06-10,2024-09-15,2024-09-16,2024-09-17,2024-10-01,2024-10-02,,2024-10-03,2024-10-04,2024-10-05,2024-10-06,2024-10-07";
        String workStr="2024-02-04,2024-02-18,2024-04-07,2024-04-28,2024-05-11,2024-09-14,2024-09-29,2024-10-12";

       System.out.print(HolidayOrWork.getWorkDay("2024-06-08",4,workStr,holidayStr));

    }
}