public static ZoneOffsetTransitionRule of(Month month, int dayOfMonthIndicator, DayOfWeek dayOfWeek, LocalTime time,
      boolean timeEndOfDay, TimeDefinition timeDefnition, ZoneOffset standardOffset, ZoneOffset offsetBefore,
      ZoneOffset offsetAfter) {

    Jdk7Methods.Objects_requireNonNull(month, "month");
    Jdk7Methods.Objects_requireNonNull(time, "time");
    Jdk7Methods.Objects_requireNonNull(timeDefnition, "timeDefnition");
    Jdk7Methods.Objects_requireNonNull(standardOffset, "standardOffset");
    Jdk7Methods.Objects_requireNonNull(offsetBefore, "offsetBefore");
    Jdk7Methods.Objects_requireNonNull(offsetAfter, "offsetAfter");
    if (dayOfMonthIndicator < -28 || dayOfMonthIndicator > 31 || dayOfMonthIndicator == 0) {
      throw new IllegalArgumentException("Day of month indicator must be between -28 and 31 inclusive excluding zero");
    }
    if (timeEndOfDay && time.equals(LocalTime.MIDNIGHT) == false) {
      throw new IllegalArgumentException("Time must be midnight when end of day flag is true");
    }
    return new ZoneOffsetTransitionRule(month, dayOfMonthIndicator, dayOfWeek, time, timeEndOfDay, timeDefnition,
        standardOffset, offsetBefore, offsetAfter);
  }