public function setTime($mixValue, $intMinute = null, $intSecond = null, $intMicroSeconds = null)
    {
        if ($mixValue instanceof QDateTime) {
            if ($mixValue->isTimeNull()) {
                $this->blnTimeNull = true;
                $this->reinforceNullProperties();
                return $this;
            }
            // normalize the timezones
            $tz = $this->getTimezone();
            if ($tz && in_array($tz->getName(), timezone_identifiers_list())) {
                // php limits you to ID only timezones here, so make sure we have one of those
                $mixValue->setTimezone($tz);
            }
            $intHour = $mixValue->Hour;
            $intMinute = $mixValue->Minute;
            $intSecond = $mixValue->Second;
        } else {
            $intHour = $mixValue;
        }
        // If HOUR or MINUTE is NULL...
        if (is_null($intHour) || is_null($intMinute)) {
            if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
                parent::setTime($intHour, $intMinute, $intSecond, $intMicroSeconds);
            } else {
                parent::setTime($intHour, $intMinute, $intSecond);
            }
            $this->blnTimeNull = true;
            $this->reinforceNullProperties();
            return $this;
        }

        $intHour = Type::cast($intHour, Type::INTEGER);
        $intMinute = Type::cast($intMinute, Type::INTEGER);
        $intSecond = Type::cast($intSecond, Type::INTEGER);
        $this->blnTimeNull = false;

        /*
        // Possible fix for a PHP problem. Can't reproduce, so leaving code here just in case it comes back.
        // The problem is with setting times across dst barriers
        if ($this->Hour == 0 && preg_match('/[0-9]+/', $this->getTimezone()->getName())) {
            // fix a php problem with GMT and relative timezones
            $s = 'PT' . $intHour . 'H' . $intMinute . 'M' . $intSecond . 'S';
            $this->add (new DateInterval ($s));
            // will continue and set again to make sure, because boundary crossing will change the time
        }*/

        if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
            parent::setTime($intHour, $intMinute, $intSecond, $intMicroSeconds);
        } else {
            parent::setTime($intHour, $intMinute, $intSecond);
        }

        return $this;
    }