How to add Business hours to Date considering not adding weekends ? - Java

前端 未结 7 970
盖世英雄少女心
盖世英雄少女心 2020-12-12 04:47

I want to add certain number of hours to date, ignoring the weekends

For example,

(Friday 18:00) + 48 = (Tuseday 18:00) (Saturday and Sunday are ignored)

7条回答
  •  难免孤独
    2020-12-12 05:22

    Below code does solve the purpose.

    public static Date addBusinessHours(Calendar startDate, int hours, int workingHourStart, int workingHourEnd){
        System.out.println("Entering: Date Time " + startDate.getTime() + " | Remaining Hours: "+ hours + " | Working hours ("+workingHourStart+"-"+workingHourEnd+")");
    
        if(hours == 0){
            return startDate.getTime();
        }
        int hourOfDay = startDate.get(Calendar.HOUR_OF_DAY);
        if(startDate.get(Calendar.MINUTE) > 0){
            hourOfDay = hourOfDay +1;
        }
    
        int dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
    
        if(dayOfWeek == Calendar.SATURDAY){
            startDate.add(Calendar.DATE, 2);
            startDate.set(Calendar.HOUR_OF_DAY, workingHourStart);
            startDate.set(Calendar.MINUTE, 0);
            startDate.set(Calendar.SECOND, 0);
            addBusinessHours(startDate, hours, workingHourStart, workingHourEnd);
        }
        if(dayOfWeek == Calendar.SUNDAY){
            startDate.add(Calendar.DATE, 1);
            startDate.set(Calendar.HOUR_OF_DAY, workingHourStart);
            startDate.set(Calendar.MINUTE, 0);
            startDate.set(Calendar.SECOND, 0);
            addBusinessHours(startDate, hours, workingHourStart, workingHourEnd);
        }
    
        if(dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY){
            if(hourOfDay < workingHourStart){
                startDate.set(Calendar.HOUR_OF_DAY, workingHourStart);
                startDate.set(Calendar.MINUTE, 0);
                startDate.set(Calendar.SECOND, 0);
                hourOfDay = startDate.get(Calendar.HOUR_OF_DAY);
                dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
                addBusinessHours(startDate, hours, workingHourStart, workingHourEnd);
            }
            else if(hourOfDay >= workingHourEnd){
    
                startDate.add(Calendar.DATE, 1);
                startDate.set(Calendar.HOUR_OF_DAY, workingHourStart);
                startDate.set(Calendar.MINUTE, 0);
                startDate.set(Calendar.SECOND, 0);
                hourOfDay = startDate.get(Calendar.HOUR_OF_DAY);
                dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
                addBusinessHours(startDate, hours, workingHourStart, workingHourEnd);
            }
    
            else if(hourOfDay >= workingHourStart && hourOfDay < workingHourEnd){
                if(hours+hourOfDay <= workingHourEnd){
                    startDate.add(Calendar.HOUR_OF_DAY, hours);
                    return startDate.getTime();
                }else{
                    //System.out.println("¤¤" + startDate.getTime() );
                    startDate.add(Calendar.DATE, 1);
                    //System.out.println("¤¤" + startDate.getTime() );
                    startDate.set(Calendar.HOUR_OF_DAY, workingHourStart);
                    startDate.set(Calendar.MINUTE, 0);
                    startDate.set(Calendar.SECOND, 0);
                    //System.out.println("¤¤" + startDate.getTime() );
    
                    System.out.println("##"+hours+ "##"+ workingHourEnd + "##" + hourOfDay);
                    int remaining_hours = hours - (workingHourEnd - hourOfDay);
                    addBusinessHours(startDate, remaining_hours, workingHourStart, workingHourEnd);
                }
            }
        }
    
        return startDate.getTime();
    }
    

提交回复
热议问题