code: public static int getAbsMonthDay(final java.util.Date date, final int monthDay) {
          if (monthDay == 0 || monthDay < -MAX_DAYS_PER_MONTH || monthDay > MAX_DAYS_PER_MONTH) {
              throw new IllegalArgumentException(MessageFormat.format(INVALID_MONTH_DAY_MESSAGE,
                      monthDay));
          }
          if (monthDay > 0) {
              return monthDay;
          }
          final Calendar cal = Calendar.getInstance();
          cal.setTime(date);
          final int month = cal.get(Calendar.MONTH);
          // construct a list of possible month days..
          final List<Integer> days = new ArrayList<Integer>();
          cal.set(Calendar.DAY_OF_MONTH, 1);
          while (cal.get(Calendar.MONTH) == month) {
              days.add(cal.get(Calendar.DAY_OF_MONTH));
              cal.add(Calendar.DAY_OF_MONTH, 1);
          }
          return days.get(days.size() + monthDay);
      }
docs: Returns the absolute month day for the month specified by the
  supplied date. Note that a value of zero (0) is invalid for the
  monthDay parameter and an <code>IllegalArgumentException</code>
  will be thrown.
  @param date a date instance representing a day of the month
  @param monthDay a day of month offset
  @return the absolute day of month for the specified offset