@Override
    public String toString() {
      StringJoiner joiner = new StringJoiner(";", RRULE + ":", "");

      joiner.add(FREQ + "=" + freq());
      if (until() != null) {
        joiner.add(UNTIL + "=" + until());
      }
      if (count() != null) {
        joiner.add(COUNT + "=" + count());
      }
      if (interval() != null) {
        joiner.add(INTERVAL + "=" + interval());
      }
      if (wkst() != null) {
        joiner.add(WKST + "=" + wkst());
      }
      if (byRuleMap() != null) {
        for (ByRule rule : byRuleMap().keySet()) {
          joiner.add(rule.toString() + "=" + byRuleMap().get(rule));
        }
      }
      return joiner.toString();
    }
A method for parsing an ExDate string in an {@link ExDate}

@param exDateString a string containing ExDate information, excluding the EXDATE prefix
@return an {@link ExDate}
portability-types-common/src/main/java/org/datatransferproject/types/common/models/calendar/RecurrenceRule.java