public function formatLikeIntl($format, $tz_format = null, $locale = null)
    {
        if (is_int($format)) {
            $format = self::getFormatLikeIntlById($format);
        }

        if ($locale == '') {
            $locale = setlocale(LC_TIME, 0);
        }

        static $formatters = array();

        if (!isset($formatters[$locale])) {
            $formatters[$locale] = new IntlDateFormatter(
                $locale,
                IntlDateFormatter::FULL,
                IntlDateFormatter::FULL
            );
        }

        $formatter = $formatters[$locale];
        $formatter->setTimeZone($this->getTimezone()->getName());
        $formatter->setPattern($format);

        $timestamp = $this->getTimestamp();
        $out = $formatter->format($timestamp);

        if ($tz_format !== null) {
            $out .= ' ' . $this->formatTZ($tz_format);
        }

        return $out;
    }