code: private static void writeZonePropsByDOW(Writer writer, boolean isDst, String tzname, int fromOffset, int toOffset,
              int month, int weekInMonth, int dayOfWeek, long startTime, long untilTime) throws IOException {
          beginZoneProps(writer, isDst, tzname, fromOffset, toOffset, startTime);
  
          beginRRULE(writer, month);
          writer.write(ICAL_BYDAY);
          writer.write(EQUALS_SIGN);
          writer.write(Integer.toString(weekInMonth));    // -4, -3, -2, -1, 1, 2, 3, 4
          writer.write(ICAL_DOW_NAMES[dayOfWeek - 1]);    // SU, MO, TU...
  
          if (untilTime != MAX_TIME) {
              appendUNTIL(writer, getDateTimeString(untilTime + fromOffset));
          }
          writer.write(NEWLINE);
  
          endZoneProps(writer, isDst);
      }
docs: /*
  Write start times defined by a DOW rule using VTIMEZONE RRULE