protected void handleHoliday(Calendar c, boolean resetTime) { if (!holidays.isEmpty()) { Date current = c.getTime(); for (TimePeriod holiday : holidays) { // check each holiday if it overlaps current date and break after first match if (current.after(holiday.getFrom()) && current.before(holiday.getTo())) { Calendar tmp = new GregorianCalendar(); tmp.setTime(holiday.getTo()); Calendar tmp2 = new GregorianCalendar(); tmp2.setTime(current); tmp2.set(Calendar.HOUR_OF_DAY, 0); tmp2.set(Calendar.MINUTE, 0); tmp2.set(Calendar.SECOND, 0); tmp2.set(Calendar.MILLISECOND, 0); long difference = tmp.getTimeInMillis() - tmp2.getTimeInMillis(); c.add(Calendar.HOUR_OF_DAY, (int) (difference/HOUR_IN_MILLIS)); handleWeekend(c, resetTime); break; } } } }
c.add(Calendar.WEEK_OF_YEAR, numberOfWeeks); handleWeekend(c, hours > 0 || min > 0); hours += (days - (numberOfWeeks * daysPerWeek)) * hoursInDay; for (int i = 0; i < numberOfDays; i++) { c.add(Calendar.DAY_OF_YEAR, 1); handleWeekend(c, false); handleHoliday(c, hours > 0 || min > 0); handleWeekend(c, true); handleHoliday(c, hours > 0 || min > 0); handleWeekend(c, false);
protected void handleHoliday(Calendar c, boolean resetTime) { if (!holidays.isEmpty()) { Date current = c.getTime(); for (TimePeriod holiday : holidays) { // check each holiday if it overlaps current date and break after first match if (current.after(holiday.getFrom()) && current.before(holiday.getTo())) { Calendar tmp = new GregorianCalendar(); tmp.setTime(holiday.getTo()); Calendar tmp2 = new GregorianCalendar(); tmp2.setTime(current); tmp2.set(Calendar.HOUR_OF_DAY, 0); tmp2.set(Calendar.MINUTE, 0); tmp2.set(Calendar.SECOND, 0); tmp2.set(Calendar.MILLISECOND, 0); long difference = tmp.getTimeInMillis() - tmp2.getTimeInMillis(); c.add(Calendar.HOUR_OF_DAY, (int) (difference/HOUR_IN_MILLIS)); handleWeekend(c, resetTime); break; } } } }
c.add(Calendar.WEEK_OF_YEAR, numberOfWeeks); handleWeekend(c, hours > 0 || min > 0); hours += (days - (numberOfWeeks * daysPerWeek)) * hoursInDay; for (int i = 0; i < numberOfDays; i++) { c.add(Calendar.DAY_OF_YEAR, 1); handleWeekend(c, false); handleHoliday(c, hours > 0 || min > 0); handleWeekend(c, true); handleHoliday(c, hours > 0 || min > 0); handleWeekend(c, false);