code: public Date adjustDate(final Date startDate, final int increment, final NonWorkingDayChecker<Date> checker) {
          final Calendar cal = (Calendar) Utils.getCal(startDate).clone();
          int step = increment;
          final int month = cal.get(Calendar.MONTH);
  
          while (checker.isNonWorkingDay(cal.getTime())) {
              cal.add(Calendar.DAY_OF_MONTH, step);
              if (month != cal.get(Calendar.MONTH)) {
                  // switch direction and go back
                  step *= -1;
                  cal.add(Calendar.DAY_OF_MONTH, step);
              }
          }
  
          return cal.getTime();
      }
docs: -----------------------------------------------------------------------