public static function getTimeZoneAbbreviations()
    {
        static $shortnames = null;

        if (self::$tz_abbreviations === null) {
            self::$tz_abbreviations = array();

            $abbreviations = DateTimeZone::listAbbreviations();
            foreach ($abbreviations as $abbreviation => $time_zones) {
                if (isset(self::$valid_tz_abbreviations[$abbreviation])) {
                    foreach ($time_zones as $tz) {
                        $tz_id = $tz['timezone_id'];
                        if (!isset(self::$tz_abbreviations[$tz_id])) {
                            self::$tz_abbreviations[$tz_id] = array();
                        }

                        // daylight-time or standard-time
                        $key = $tz['dst'] ? 'dt' : 'st';
                        if (!isset(self::$tz_abbreviations[$tz_id][$key])) {
                            self::$tz_abbreviations[$tz_id][
                                $key
                            ] = mb_strtoupper($abbreviation);
                        }
                    }
                }
            }
        }

        return self::$tz_abbreviations;
    }