public long addWrapField(long instant, int years) {
   if (years == 0) {
     return instant;
   }
   // Return newly calculated millis value
   int thisYear = iChronology.getYear(instant);
   int wrappedYear =
       FieldUtils.getWrappedValue(
           thisYear, years, iChronology.getMinYear(), iChronology.getMaxYear());
   return set(instant, wrappedYear);
 }
  // -----------------------------------------------------------------------
  public long add(long instant, long months) {
    int i_months = (int) months;
    if (i_months == months) {
      return add(instant, i_months);
    }

    // Copied from add(long, int) and modified slightly:

    long timePart = iChronology.getMillisOfDay(instant);

    int thisYear = iChronology.getYear(instant);
    int thisMonth = iChronology.getMonthOfYear(instant, thisYear);

    long yearToUse;
    long monthToUse = thisMonth - 1 + months;
    if (monthToUse >= 0) {
      yearToUse = thisYear + (monthToUse / iMax);
      monthToUse = (monthToUse % iMax) + 1;
    } else {
      yearToUse = thisYear + (monthToUse / iMax) - 1;
      monthToUse = Math.abs(monthToUse);
      int remMonthToUse = (int) (monthToUse % iMax);
      if (remMonthToUse == 0) {
        remMonthToUse = iMax;
      }
      monthToUse = iMax - remMonthToUse + 1;
      if (monthToUse == 1) {
        yearToUse += 1;
      }
    }

    if (yearToUse < iChronology.getMinYear() || yearToUse > iChronology.getMaxYear()) {

      throw new IllegalArgumentException("Magnitude of add amount is too large: " + months);
    }

    int i_yearToUse = (int) yearToUse;
    int i_monthToUse = (int) monthToUse;

    int dayToUse = iChronology.getDayOfMonth(instant, thisYear, thisMonth);
    int maxDay = iChronology.getDaysInYearMonth(i_yearToUse, i_monthToUse);
    if (dayToUse > maxDay) {
      dayToUse = maxDay;
    }

    long datePart = iChronology.getYearMonthDayMillis(i_yearToUse, i_monthToUse, dayToUse);
    return datePart + timePart;
  }
 public long set(long instant, int year) {
   FieldUtils.verifyValueBounds(this, year, iChronology.getMinYear(), iChronology.getMaxYear());
   return iChronology.setYear(instant, year);
 }
 public int getMinimumValue() {
   return iChronology.getMinYear();
 }