code: public String toIcal() {
          StringBuilder buf = new StringBuilder();
          buf.append(this.getName().toUpperCase());
          buf.append(";TZID=\"").append(tzid.getID()).append('"');
          buf.append(";VALUE=").append(valueType.toIcal());
          if (hasExtParams()) {
              for (Map.Entry<String, String> param : getExtParams().entrySet()) {
                  String k = param.getKey(),
                          v = param.getValue();
                  if (ICAL_SPECIALS.matcher(v).find()) {
                      v = "\"" + v + "\"";
                  }
                  buf.append(';').append(k).append('=').append(v);
              }
          }
          buf.append(':');
          for (int i = 0; i < datesUtc.length; ++i) {
              if (0 != i) {
                  buf.append(',');
              }
              DateValue v = datesUtc[i];
              buf.append(v);
              if (v instanceof TimeValue) {
                  buf.append('Z');
              }
          }
          return buf.toString();
      }
docs: returns a String containing ical content lines.