code: public static Calendar merge(final Calendar c1, final Calendar c2) {
          final Calendar result = new Calendar();
          result.getProperties().addAll(c1.getProperties());
          for (final Property p : c2.getProperties()) {
              if (!result.getProperties().contains(p)) {
                  result.getProperties().add(p);
              }
          }
          result.getComponents().addAll(c1.getComponents());
          for (final CalendarComponent c : c2.getComponents()) {
              if (!result.getComponents().contains(c)) {
                  result.getComponents().add(c);
              }
          }
          return result;
      }
docs: Merge all properties and components from two specified calendars into one instance.
  Note that the merge process is not very sophisticated, and may result in invalid calendar
  data (e.g. multiple properties of a type that should only be specified once).
  @param c1 the first calendar to merge
  @param c2 the second calendar to merge
  @return a Calendar instance containing all properties and components from both of the specified calendars