public function withDateAtDayOfWeekInMonth(int $dayOfWeek, int $occurrence) : self
    {
        self::assertValidDayOfWeek($dayOfWeek);
        
        if ($occurrence < -5 || $occurrence === 0 || $occurrence > 5) {
            throw new \InvalidArgumentException("Invalid occurrence: $occurrence.");
        }
        
        $calendar = $this->createCalendar();
        
        // IntlCalendar uses Sunday as day 1 - convert that to Monday as day 1.
        if (++$dayOfWeek === 8) {
            $dayOfWeek = 1;
        }
        
        $calendar->set(\IntlCalendar::FIELD_DAY_OF_WEEK, $dayOfWeek);
        $calendar->set(\IntlCalendar::FIELD_DAY_OF_WEEK_IN_MONTH, $occurrence);
        
        return static::fromIntlCalendar($calendar);
    }