code: public DayPartitionBuilder addSpecialRule(
          PlainDate specialDay,
          ClockInterval partition
      ) {
  
          if (specialDay == null) {
              throw new NullPointerException("Missing special calendar date.");
          }
  
          try {
              ClockInterval p = partition.toCanonical();
  
              if (!p.isEmpty()) {
                  List<ChronoInterval<PlainTime>> ps = this.exceptionRules.get(specialDay);
                  if (ps == null) {
                      ps = new ArrayList<>(5);
                      ps.add(p);
                  } else {
                      ps = IntervalCollection.onClockAxis().plus(ps).plus(p).withBlocks().getIntervals();
                  }
                  this.exceptionRules.put(specialDay, ps);
              }
  
              return this;
          } catch (IllegalStateException ise) {
              throw new IllegalArgumentException(ise);
          }
  
      }
docs: /*[deutsch]
  <p>F&uuml;gt eine Regel hinzu, die einen speziellen Kalendertag zerlegt. </p>
  
  <p>Diese Methode kann mehrmals f&uuml;r das gleiche Datum aufgerufen werden, um mehr als einen
  Tagesabschnitt zu definieren. </p>
  
  @param   specialDay  controls the partitioning in the final day partition rule
  @param   partition   a clock interval
  @return  this instance for method chaining
  @throws  IllegalArgumentException if there is no canonical form of given interval (for example for [00:00/24:00])
  @see     IsoInterval#toCanonical()