code: public final Date getTime(final Date start) {
          final Calendar cal;
          if (start instanceof net.fortuna.ical4j.model.Date) {
              cal = Dates.getCalendarInstance((net.fortuna.ical4j.model.Date)start);
          } else {
              cal = Calendar.getInstance();
          }
  
          cal.setTime(start);
          if (isNegative()) {
              cal.add(Calendar.WEEK_OF_YEAR, -weeks);
              cal.add(Calendar.DAY_OF_WEEK, -days);
              cal.add(Calendar.HOUR_OF_DAY, -hours);
              cal.add(Calendar.MINUTE, -minutes);
              cal.add(Calendar.SECOND, -seconds);
          }
          else {
              cal.add(Calendar.WEEK_OF_YEAR, weeks);
              cal.add(Calendar.DAY_OF_WEEK, days);
              cal.add(Calendar.HOUR_OF_DAY, hours);
              cal.add(Calendar.MINUTE, minutes);
              cal.add(Calendar.SECOND, seconds);
          }
          return cal.getTime();
      }
docs: Returns a date representing the end of this duration from the specified start date.
  @param start the date to start the duration
  @return the end of the duration as a date