public function setValue($val)
    {

        // Fuzzy matching through strtotime() to support a wider range of times,
        // e.g. 11am. This means that validate() might not fire.
        // Note: Time formats are assumed to be less ambiguous than dates across locales.
        if ($this->getConfig('use_strtotime') && !empty($val)) {
            if ($parsedTimestamp = strtotime($val)) {
                $parsedObj = new Zend_Date($parsedTimestamp, Zend_Date::TIMESTAMP);
                $val = $parsedObj->get($this->getConfig('timeformat'));
                unset($parsedObj);
            }
        }

        if (empty($val)) {
            $this->value = null;
            $this->valueObj = null;
        }
        // load ISO time from database (usually through Form->loadDataForm())
        // Requires exact format to prevent false positives from locale specific times
        else if ($this->valueObj = $this->parseTime($val, $this->getConfig('datavalueformat'), null, true)) {
            $this->value = $this->valueObj->get($this->getConfig('timeformat'));
        }
        // Set in current locale (as string)
        else if ($this->valueObj = $this->parseTime($val, $this->getConfig('timeformat'), $this->locale)) {
            $this->value = $this->valueObj->get($this->getConfig('timeformat'));
        }
        // Fallback: Set incorrect value so validate() can pick it up
        elseif (is_string($val)) {
            $this->value = $val;
            $this->valueObj = null;
        } else {
            $this->value = null;
            $this->valueObj = null;
        }

        return $this;
    }