code: private static Date set(final Date date, final int calendarField, final int amount) {
          validateDateNotNull(date);
          // getInstance() returns a new object, so this method is thread safe.
          final Calendar c = Calendar.getInstance();
          c.setLenient(false);
          c.setTime(date);
          c.set(calendarField, amount);
          return c.getTime();
      }
docs: Sets the specified field to a date returning a new object.
  This does not use a lenient calendar.
  The original {@code Date} is unchanged.
  
  @param date  the date, not null
  @param calendarField  the {@code Calendar} field to set the amount to
  @param amount the amount to set
  @return a new {@code Date} set with the specified value
  @throws IllegalArgumentException if the date is null
  @since 2.4