public function setTimezone($timezone)
    {
        // Check type, and parse string if present
        if (is_string($timezone)) {
            $timezone = TimeZone::parse($timezone);
        } else {
            if ($timezone instanceof TimeZone == false) {
                throw new \InvalidArgumentException();
            }
        }

        // Convert back to UTC
        //$this->toUTC();
        // Compute new UTC offset
        $jd       = $this->toJD();
        $tzOffset = $timezone->offset($jd) - $this->timezone->offset($jd);

        $this->add(Time::hours($tzOffset));

        // Set the timezone
        $this->timezone  = $timezone;
        $this->timezone0 = $timezone;

        return $this;
    }