Frames Modems Help Home Page Chipsets Search No Frames
Diary Entries See also Site Info & Diary.
12 April 2004 Documenting the php PEAR Date_TimeZone Class...
 

This page seeks to document (below) one of the un-documented Classes within PEAR--the “PHP Extension and Application Repository”, one of the hidden extras of PHP--namely the Date_TimeZone Class.

If you look at the PEAR manual for Date and Time you will find page after page documenting the Calendar Class, and absolutely nothing about the Date Class. There is a part-attempt by myself to document the Date class on the 26 March, but later research shows that it is necessary to preset the TimeZone for the date--at least if you want an accurate result in the UK during British Summer Time, and this is done using the Date_TimeZone class, hence this page.

I do not have the time to do a full job, either, but will attempt to at least list all the functions of the Class and to give any specifics as I find them.

 

After some frustrating days I finally was able to confirm a possible bug with inDaylightTime() (reported by email to the module writer and also on the PEAR bug-report page). See bston.php for 2 simple pages that make the point (they will do this only while BST - British Summer Time - is in effect here in the UK). Also, below are the headings for the _DATE_TIMEZONE_DATA array.

The discovery occurred because what should have been 100 rows of dates was actually 101, and the caching-mechanism that I had in place did not roll over until 1 am - all indications of a possible BST problem. In fact, there turned out to be 2 issues:

  • The constructor was setting the TimeZone to either Bangladesh or UTC.
  • When inDaylightTime() was used it caused date('r') to report GMT rather than BST.

Date() calls Date_TimeZone, and this latter looks for (amongst others) a global variable $_DATE_TIMEZONE_DEFAULT. In the absence of this--or 2 other--variables, it sets the TimeZone to “UTC”.

Before the above became clear to me I put a little routine in place to check the BST of both today’s date & a 100-day-old date. inDaylightTime() was used to find this. This was the code:

  $oldDay=new Date();
  $oldDay->subtractSeconds( 100 * 86400 ); // 100 days
  $today=new Date();
  $todayDST=($today->inDaylightTime())?"\$today has dst switched ON":"\$today has dst switched OFF";
  $oldDay=($oldDay->inDaylightTime())?"\$oldDay has dst switched ON":"\$oldDay has dst switched OFF";

Both dates turned out to be GMT, even though BST was now active in the UK. I then also found out that the timezone of each Date was switching: sometimes it was UTC, sometimes it was BST. The latter sounded good until I discovered that it meant “Bangladesh Time”! Such behaviour sounds like a bug. Adding

$_DATE_TIMEZONE_DEFAULT='GB';
before the code above fixed the timezone problem. I also then discovered that $today was BST & $oldDay was GMT (correct) so that was good. However, every page on the .com site reports the time at which the script runs, and the bug was confirmed when I spotted that the time was reported in GMT & not BST. Bugger. Thankfully, it was a per-script bug & not server-wide, although Apache did freeze shortly after. [Later update: an apachectl graceful fixed the initial freeze, but a few hours later I discovered many defunct processes, including one httpd process occupying 98% of cpu4. None of these daemons would die, and in the absence of a silver bullet & gun had to resort to brute force and do a hard reset. These problems may be connected with the bug, or may not. In any case, the bug continues.]

 

The PEAR Date_TimeZone() class:

Overview:

The Date() constructor calls Date_TimeZone::getDefault(), and this latter returns a Date_TimeZone object with a default id of $_DATE_TIMEZONE_DEFAULT. This object is stored within the Date->tz variable. The notes for the Date_TimeZone constructor state that it looks for (in this order):

  1. A global variable $_DATE_TIMEZONE_DEFAULT.
  2. A system environment variable PHP_TZ.
  3. A system environment variable TZ.
  4. The result of date('T').

If none of the above exist it sets the TimeZone to “UTC”. This latter has no Daylight Saving Time (DST) entries. date('T') on my server in the UK during summer-time gives “BST”, which results in dates being set to “Bangladesh Time”. Sigh.

The practicalities, then, are to set one of the above before including the Date() class. Use (one only) of:

  $_DATE_TIMEZONE_DEFAULT='GB';
  putenv ("PHP_TZ='GB'");                     // lasts only for duration of script
  putenv ("TZ='GB'");                         // lasts only for duration of script

then do:

  require_once 'Date.php';
  $today = new Date();

If you then want another date for a different timezone, do:

  $_DATE_TIMEZONE_DEFAULT='BST':
  $bsday = new Date();                        // Bangladesh Time

Section groupings:

  1. Constructor
  2. Public functions
  3. $_DATE_TIMEZONE_DATA array
 

Section groupings: Constructor:

  $tz = new Date_TimeZone( $id );             // $_DATE_TIMEZONE_DATA[$id] must be valid

Class variables; these are the array entries from $_DATE_TIMEZONE_DATA[] determined at the time of file-include + a Date_TimeZone object:

  $Date_TimeZone->id                 // Time Zone ID. string (see $_DATE_TIMEZONE_DATA array)
  $Date_TimeZone->longname           // $_DATE_TIMEZONE_DATA[$id][1]
  $Date_TimeZone->shortname          // $_DATE_TIMEZONE_DATA[$id][2]
  $Date_TimeZone->hasdst             // $_DATE_TIMEZONE_DATA[$id][3] TRUE/FALSE
  $Date_TimeZone->dstlongname        // $_DATE_TIMEZONE_DATA[$id][4]
  $Date_TimeZone->dstshortname       // $_DATE_TIMEZONE_DATA[$id][5]
  $Date_TimeZone->offset             // $_DATE_TIMEZONE_DATA[$id][0] milliseconds
  $Date_TimeZone->default            // include-time Date_TimeZone object
 

Section groupings: Public functions:

  $Date_TimeZone->getAvailableIDs()     // returns array of keys to _DATE_TIMEZONE_DATA
  $Date_TimeZone->getDSTLongName()      // returns $this->dstlongname
  $Date_TimeZone->getDSTSavings()       // milliseconds or zero
  $Date_TimeZone->getDSTShortName()     // returns $this->dstshortname
  $Date_TimeZone->getID()               // returns $this->id
  $Date_TimeZone->getLongName()         // returns $this->longname
  $Date_TimeZone->getOffset($date)      // makes a call to inDaylightTime($date) (bug)
  $Date_TimeZone->getRawOffset()        // returns $this->offset (no DST correction)
  $Date_TimeZone->getShortName()        // returns $this->shortname
  $Date_TimeZone->hasDaylightTime()     // return TRUE/FALSE
  $Date_TimeZone->inDaylightTime($date) // this is the call causing a bug on my system
  $Date_TimeZone->isEqual($tz)          // return TRUE/FALSE for $tz Date_TimeZone object
  $Date_TimeZone->isEquivalent($tz)     // return TRUE/FALSE for $tz Date_TimeZone object
  $Date_TimeZone->isValidID($id)        // return TRUE/FALSE
  $Date_TimeZone->setDefault($id)       // sets global $_DATE_TIMEZONE_DEFAULT to $id if valid
 

Here are the _DATE_TIMEZONE_DATA array keys; this is what to set $_DATE_TIMEZONE_DEFAULT to (first column) (or use with Date_TimeZone::setDefault()):

  Time Zone ID                : Long Name
  ACT                         : Central Standard Time (Northern Territory)
  AET                         : Eastern Standard Time (New South Wales)
  Africa/Abidjan              : Greenwich Mean Time
  Africa/Accra                : Greenwich Mean Time
  Africa/Addis_Ababa          : Eastern African Time
  Africa/Algiers              : Central European Time
  Africa/Asmera               : Eastern African Time
  Africa/Bamako               : Greenwich Mean Time
  Africa/Bangui               : Western African Time
  Africa/Banjul               : Greenwich Mean Time
  Africa/Bissau               : Greenwich Mean Time
  Africa/Blantyre             : Central African Time
  Africa/Brazzaville          : Western African Time
  Africa/Bujumbura            : Central African Time
  Africa/Cairo                : Eastern European Time
  Africa/Casablanca           : Western European Time
  Africa/Ceuta                : Central European Time
  Africa/Conakry              : Greenwich Mean Time
  Africa/Dakar                : Greenwich Mean Time
  Africa/Dar_es_Salaam        : Eastern African Time
  Africa/Djibouti             : Eastern African Time
  Africa/Douala               : Western African Time
  Africa/El_Aaiun             : Western European Time
  Africa/Freetown             : Greenwich Mean Time
  Africa/Gaborone             : Central African Time
  Africa/Harare               : Central African Time
  Africa/Johannesburg         : South Africa Standard Time
  Africa/Kampala              : Eastern African Time
  Africa/Khartoum             : Eastern African Time
  Africa/Kigali               : Central African Time
  Africa/Kinshasa             : Western African Time
  Africa/Lagos                : Western African Time
  Africa/Libreville           : Western African Time
  Africa/Lome                 : Greenwich Mean Time
  Africa/Luanda               : Western African Time
  Africa/Lubumbashi           : Central African Time
  Africa/Lusaka               : Central African Time
  Africa/Malabo               : Western African Time
  Africa/Maputo               : Central African Time
  Africa/Maseru               : South Africa Standard Time
  Africa/Mbabane              : South Africa Standard Time
  Africa/Mogadishu            : Eastern African Time
  Africa/Monrovia             : Greenwich Mean Time
  Africa/Nairobi              : Eastern African Time
  Africa/Ndjamena             : Western African Time
  Africa/Niamey               : Western African Time
  Africa/Nouakchott           : Greenwich Mean Time
  Africa/Ouagadougou          : Greenwich Mean Time
  Africa/Porto-Novo           : Western African Time
  Africa/Sao_Tome             : Greenwich Mean Time
  Africa/Timbuktu             : Greenwich Mean Time
  Africa/Tripoli              : Eastern European Time
  Africa/Tunis                : Central European Time
  Africa/Windhoek             : Western African Time
  AGT                         : Argentine Time
  America/Adak                : Hawaii-Aleutian Standard Time
  America/Anchorage           : Alaska Standard Time
  America/Anguilla            : Atlantic Standard Time
  America/Antigua             : Atlantic Standard Time
  America/Araguaina           : Brazil Time
  America/Aruba               : Atlantic Standard Time
  America/Asuncion            : Paraguay Time
  America/Atka                : Hawaii-Aleutian Standard Time
  America/Barbados            : Atlantic Standard Time
  America/Belem               : Brazil Time
  America/Belize              : Central Standard Time
  America/Boa_Vista           : Amazon Standard Time
  America/Bogota              : Colombia Time
  America/Boise               : Mountain Standard Time
  America/Buenos_Aires        : Argentine Time
  America/Cambridge_Bay       : Mountain Standard Time
  America/Cancun              : Central Standard Time
  America/Caracas             : Venezuela Time
  America/Catamarca           : Argentine Time
  America/Cayenne             : French Guiana Time
  America/Cayman              : Eastern Standard Time
  America/Chicago             : Central Standard Time
  America/Chihuahua           : Mountain Standard Time
  America/Cordoba             : Argentine Time
  America/Costa_Rica          : Central Standard Time
  America/Cuiaba              : Amazon Standard Time
  America/Curacao             : Atlantic Standard Time
  America/Danmarkshavn        : Greenwich Mean Time
  America/Dawson              : Pacific Standard Time
  America/Dawson_Creek        : Mountain Standard Time
  America/Denver              : Mountain Standard Time
  America/Detroit             : Eastern Standard Time
  America/Dominica            : Atlantic Standard Time
  America/Edmonton            : Mountain Standard Time
  America/Eirunepe            : Acre Time
  America/El_Salvador         : Central Standard Time
  America/Ensenada            : Pacific Standard Time
  America/Fort_Wayne          : Eastern Standard Time
  America/Fortaleza           : Brazil Time
  America/Glace_Bay           : Atlantic Standard Time
  America/Godthab             : Western Greenland Time
  America/Goose_Bay           : Atlantic Standard Time
  America/Grand_Turk          : Eastern Standard Time
  America/Grenada             : Atlantic Standard Time
  America/Guadeloupe          : Atlantic Standard Time
  America/Guatemala           : Central Standard Time
  America/Guayaquil           : Ecuador Time
  America/Guyana              : Guyana Time
  America/Halifax             : Atlantic Standard Time
  America/Havana              : Central Standard Time
  America/Hermosillo          : Mountain Standard Time
  America/Indiana/Indianapolis: Eastern Standard Time
  America/Indiana/Knox        : Eastern Standard Time
  America/Indiana/Marengo     : Eastern Standard Time
  America/Indiana/Vevay       : Eastern Standard Time
  America/Indianapolis        : Eastern Standard Time
  America/Inuvik              : Mountain Standard Time
  America/Iqaluit             : Eastern Standard Time
  America/Jamaica             : Eastern Standard Time
  America/Jujuy               : Argentine Time
  America/Juneau              : Alaska Standard Time
  America/Kentucky/Louisville : Eastern Standard Time
  America/Kentucky/Monticello : Eastern Standard Time
  America/Knox_IN             : Eastern Standard Time
  America/La_Paz              : Bolivia Time
  America/Lima                : Peru Time
  America/Los_Angeles         : Pacific Standard Time
  America/Louisville          : Eastern Standard Time
  America/Maceio              : Brazil Time
  America/Managua             : Central Standard Time
  America/Manaus              : Amazon Standard Time
  America/Martinique          : Atlantic Standard Time
  America/Mazatlan            : Mountain Standard Time
  America/Mendoza             : Argentine Time
  America/Menominee           : Central Standard Time
  America/Merida              : Central Standard Time
  America/Mexico_City         : Central Standard Time
  America/Miquelon            : Pierre & Miquelon Standard Time
  America/Monterrey           : Central Standard Time
  America/Montevideo          : Uruguay Time
  America/Montreal            : Eastern Standard Time
  America/Montserrat          : Atlantic Standard Time
  America/Nassau              : Eastern Standard Time
  America/New_York            : Eastern Standard Time
  America/Nipigon             : Eastern Standard Time
  America/Nome                : Alaska Standard Time
  America/Noronha             : Fernando de Noronha Time
  America/North_Dakota/Center : Central Standard Time
  America/Panama              : Eastern Standard Time
  America/Pangnirtung         : Eastern Standard Time
  America/Paramaribo          : Suriname Time
  America/Phoenix             : Mountain Standard Time
  America/Port-au-Prince      : Eastern Standard Time
  America/Port_of_Spain       : Atlantic Standard Time
  America/Porto_Acre          : Acre Time
  America/Porto_Velho         : Amazon Standard Time
  America/Puerto_Rico         : Atlantic Standard Time
  America/Rainy_River         : Central Standard Time
  America/Rankin_Inlet        : Eastern Standard Time
  America/Recife              : Brazil Time
  America/Regina              : Central Standard Time
  America/Rio_Branco          : Acre Time
  America/Rosario             : Argentine Time
  America/Santiago            : Chile Time
  America/Santo_Domingo       : Atlantic Standard Time
  America/Sao_Paulo           : Brazil Time
  America/Scoresbysund        : Eastern Greenland Time
  America/Shiprock            : Mountain Standard Time
  America/St_Johns            : Newfoundland Standard Time
  America/St_Kitts            : Atlantic Standard Time
  America/St_Lucia            : Atlantic Standard Time
  America/St_Thomas           : Atlantic Standard Time
  America/St_Vincent          : Atlantic Standard Time
  America/Swift_Current       : Central Standard Time
  America/Tegucigalpa         : Central Standard Time
  America/Thule               : Atlantic Standard Time
  America/Thunder_Bay         : Eastern Standard Time
  America/Tijuana             : Pacific Standard Time
  America/Tortola             : Atlantic Standard Time
  America/Vancouver           : Pacific Standard Time
  America/Virgin              : Atlantic Standard Time
  America/Whitehorse          : Pacific Standard Time
  America/Winnipeg            : Central Standard Time
  America/Yakutat             : Alaska Standard Time
  America/Yellowknife         : Mountain Standard Time
  Antarctica/Casey            : Western Standard Time (Australia)
  Antarctica/Davis            : Davis Time
  Antarctica/DumontDUrville   : Dumont-d'Urville Time
  Antarctica/Mawson           : Mawson Time
  Antarctica/McMurdo          : New Zealand Standard Time
  Antarctica/Palmer           : Chile Time
  Antarctica/South_Pole       : New Zealand Standard Time
  Antarctica/Syowa            : Syowa Time
  Antarctica/Vostok           : Vostok time
  Arctic/Longyearbyen         : Central European Time
  ART                         : Eastern European Time
  Asia/Aden                   : Arabia Standard Time
  Asia/Almaty                 : Alma-Ata Time
  Asia/Amman                  : Eastern European Time
  Asia/Anadyr                 : Anadyr Time
  Asia/Aqtau                  : Aqtau Time
  Asia/Aqtobe                 : Aqtobe Time
  Asia/Ashgabat               : Turkmenistan Time
  Asia/Ashkhabad              : Turkmenistan Time
  Asia/Baghdad                : Arabia Standard Time
  Asia/Bahrain                : Arabia Standard Time
  Asia/Baku                   : Azerbaijan Time
  Asia/Bangkok                : Indochina Time
  Asia/Beirut                 : Eastern European Time
  Asia/Bishkek                : Kirgizstan Time
  Asia/Brunei                 : Brunei Time
  Asia/Calcutta               : India Standard Time
  Asia/Choibalsan             : Choibalsan Time
  Asia/Chongqing              : China Standard Time
  Asia/Chungking              : China Standard Time
  Asia/Colombo                : Sri Lanka Time
  Asia/Dacca                  : Bangladesh Time
  Asia/Damascus               : Eastern European Time
  Asia/Dhaka                  : Bangladesh Time
  Asia/Dili                   : East Timor Time
  Asia/Dubai                  : Gulf Standard Time
  Asia/Dushanbe               : Tajikistan Time
  Asia/Gaza                   : Eastern European Time
  Asia/Harbin                 : China Standard Time
  Asia/Hong_Kong              : Hong Kong Time
  Asia/Hovd                   : Hovd Time
  Asia/Irkutsk                : Irkutsk Time
  Asia/Istanbul               : Eastern European Time
  Asia/Jakarta                : West Indonesia Time
  Asia/Jayapura               : East Indonesia Time
  Asia/Jerusalem              : Israel Standard Time
  Asia/Kabul                  : Afghanistan Time
  Asia/Kamchatka              : Petropavlovsk-Kamchatski Time
  Asia/Karachi                : Pakistan Time
  Asia/Kashgar                : China Standard Time
  Asia/Katmandu               : Nepal Time
  Asia/Krasnoyarsk            : Krasnoyarsk Time
  Asia/Kuala_Lumpur           : Malaysia Time
  Asia/Kuching                : Malaysia Time
  Asia/Kuwait                 : Arabia Standard Time
  Asia/Macao                  : China Standard Time
  Asia/Magadan                : Magadan Time
  Asia/Manila                 : Philippines Time
  Asia/Muscat                 : Gulf Standard Time
  Asia/Nicosia                : Eastern European Time
  Asia/Novosibirsk            : Novosibirsk Time
  Asia/Omsk                   : Omsk Time
  Asia/Phnom_Penh             : Indochina Time
  Asia/Pontianak              : West Indonesia Time
  Asia/Pyongyang              : Korea Standard Time
  Asia/Qatar                  : Arabia Standard Time
  Asia/Rangoon                : Myanmar Time
  Asia/Riyadh                 : Arabia Standard Time
  Asia/Riyadh87               : GMT+03:07
  Asia/Riyadh88               : GMT+03:07
  Asia/Riyadh89               : GMT+03:07
  Asia/Saigon                 : Indochina Time
  Asia/Sakhalin               : Sakhalin Time
  Asia/Samarkand              : Turkmenistan Time
  Asia/Seoul                  : Korea Standard Time
  Asia/Shanghai               : China Standard Time
  Asia/Singapore              : Singapore Time
  Asia/Taipei                 : China Standard Time
  Asia/Tashkent               : Uzbekistan Time
  Asia/Tbilisi                : Georgia Time
  Asia/Tehran                 : Iran Time
  Asia/Tel_Aviv               : Israel Standard Time
  Asia/Thimbu                 : Bhutan Time
  Asia/Thimphu                : Bhutan Time
  Asia/Tokyo                  : Japan Standard Time
  Asia/Ujung_Pandang          : Central Indonesia Time
  Asia/Ulaanbaatar            : Ulaanbaatar Time
  Asia/Ulan_Bator             : Ulaanbaatar Time
  Asia/Urumqi                 : China Standard Time
  Asia/Vientiane              : Indochina Time
  Asia/Vladivostok            : Vladivostok Time
  Asia/Yakutsk                : Yakutsk Time
  Asia/Yekaterinburg          : Yekaterinburg Time
  Asia/Yerevan                : Armenia Time
  AST                         : Alaska Standard Time
  Atlantic/Azores             : Azores Time
  Atlantic/Bermuda            : Atlantic Standard Time
  Atlantic/Canary             : Western European Time
  Atlantic/Cape_Verde         : Cape Verde Time
  Atlantic/Faeroe             : Western European Time
  Atlantic/Jan_Mayen          : Eastern Greenland Time
  Atlantic/Madeira            : Western European Time
  Atlantic/Reykjavik          : Greenwich Mean Time
  Atlantic/South_Georgia      : South Georgia Standard Time
  Atlantic/St_Helena          : Greenwich Mean Time
  Atlantic/Stanley            : Falkland Is. Time
  Australia/ACT               : Eastern Standard Time (New South Wales)
  Australia/Adelaide          : Central Standard Time (South Australia)
  Australia/Brisbane          : Eastern Standard Time (Queensland)
  Australia/Broken_Hill       : Central Standard Time (South Australia/New South Wales)
  Australia/Canberra          : Eastern Standard Time (New South Wales)
  Australia/Darwin            : Central Standard Time (Northern Territory)
  Australia/Hobart            : Eastern Standard Time (Tasmania)
  Australia/LHI               : Load Howe Standard Time
  Australia/Lindeman          : Eastern Standard Time (Queensland)
  Australia/Lord_Howe         : Load Howe Standard Time
  Australia/Melbourne         : Eastern Standard Time (Victoria)
  Australia/North             : Central Standard Time (Northern Territory)
  Australia/NSW               : Eastern Standard Time (New South Wales)
  Australia/Perth             : Western Standard Time (Australia)
  Australia/Queensland        : Eastern Standard Time (Queensland)
  Australia/South             : Central Standard Time (South Australia)
  Australia/Sydney            : Eastern Standard Time (New South Wales)
  Australia/Tasmania          : Eastern Standard Time (Tasmania)
  Australia/Victoria          : Eastern Standard Time (Victoria)
  Australia/West              : Western Standard Time (Australia)
  Australia/Yancowinna        : Central Standard Time (South Australia/New South Wales)
  BET                         : Brazil Time
  Brazil/Acre                 : Acre Time
  Brazil/DeNoronha            : Fernando de Noronha Time
  Brazil/East                 : Brazil Time
  Brazil/West                 : Amazon Standard Time
  BST                         : Bangladesh Time
  Canada/Atlantic             : Atlantic Standard Time
  Canada/Central              : Central Standard Time
  Canada/East-Saskatchewan    : Central Standard Time
  Canada/Eastern              : Eastern Standard Time
  Canada/Mountain             : Mountain Standard Time
  Canada/Newfoundland         : Newfoundland Standard Time
  Canada/Pacific              : Pacific Standard Time
  Canada/Saskatchewan         : Central Standard Time
  Canada/Yukon                : Pacific Standard Time
  CAT                         : Central African Time
  CET                         : Central European Time
  Chile/Continental           : Chile Time
  Chile/EasterIsland          : Easter Is. Time
  CNT                         : Newfoundland Standard Time
  CST                         : Central Standard Time
  CST6CDT                     : Central Standard Time
  CTT                         : China Standard Time
  Cuba                        : Central Standard Time
  EAT                         : Eastern African Time
  ECT                         : Central European Time
  EET                         : Eastern European Time
  Egypt                       : Eastern European Time
  Eire                        : Greenwich Mean Time
  EST                         : Eastern Standard Time
  EST5EDT                     : Eastern Standard Time
  Etc/GMT                     : GMT+00:00
  Etc/GMT+0                   : GMT+00:00
  Etc/GMT+1                   : GMT-01:00
  Etc/GMT+10                  : GMT-10:00
  Etc/GMT+11                  : GMT-11:00
  Etc/GMT+12                  : GMT-12:00
  Etc/GMT+2                   : GMT-02:00
  Etc/GMT+3                   : GMT-03:00
  Etc/GMT+4                   : GMT-04:00
  Etc/GMT+5                   : GMT-05:00
  Etc/GMT+6                   : GMT-06:00
  Etc/GMT+7                   : GMT-07:00
  Etc/GMT+8                   : GMT-08:00
  Etc/GMT+9                   : GMT-09:00
  Etc/GMT-0                   : GMT+00:00
  Etc/GMT-1                   : GMT+01:00
  Etc/GMT-10                  : GMT+10:00
  Etc/GMT-11                  : GMT+11:00
  Etc/GMT-12                  : GMT+12:00
  Etc/GMT-13                  : GMT+13:00
  Etc/GMT-14                  : GMT+14:00
  Etc/GMT-2                   : GMT+02:00
  Etc/GMT-3                   : GMT+03:00
  Etc/GMT-4                   : GMT+04:00
  Etc/GMT-5                   : GMT+05:00
  Etc/GMT-6                   : GMT+06:00
  Etc/GMT-7                   : GMT+07:00
  Etc/GMT-8                   : GMT+08:00
  Etc/GMT-9                   : GMT+09:00
  Etc/GMT0                    : GMT+00:00
  Etc/Greenwich               : Greenwich Mean Time
  Etc/UCT                     : Coordinated Universal Time
  Etc/Universal               : Coordinated Universal Time
  Etc/Zulu                    : Coordinated Universal Time
  Europe/Amsterdam            : Central European Time
  Europe/Andorra              : Central European Time
  Europe/Athens               : Eastern European Time
  Europe/Belfast              : Greenwich Mean Time
  Europe/Belgrade             : Central European Time
  Europe/Berlin               : Central European Time
  Europe/Bratislava           : Central European Time
  Europe/Brussels             : Central European Time
  Europe/Bucharest            : Eastern European Time
  Europe/Budapest             : Central European Time
  Europe/Chisinau             : Eastern European Time
  Europe/Copenhagen           : Central European Time
  Europe/Dublin               : Greenwich Mean Time
  Europe/Gibraltar            : Central European Time
  Europe/Helsinki             : Eastern European Time
  Europe/Istanbul             : Eastern European Time
  Europe/Kaliningrad          : Eastern European Time
  Europe/Kiev                 : Eastern European Time
  Europe/Lisbon               : Western European Time
  Europe/Ljubljana            : Central European Time
  Europe/London               : Greenwich Mean Time
  Europe/Luxembourg           : Central European Time
  Europe/Madrid               : Central European Time
  Europe/Malta                : Central European Time
  Europe/Minsk                : Eastern European Time
  Europe/Monaco               : Central European Time
  Europe/Moscow               : Moscow Standard Time
  Europe/Nicosia              : Eastern European Time
  Europe/Oslo                 : Central European Time
  Europe/Paris                : Central European Time
  Europe/Prague               : Central European Time
  Europe/Riga                 : Eastern European Time
  Europe/Rome                 : Central European Time
  Europe/Samara               : Samara Time
  Europe/San_Marino           : Central European Time
  Europe/Sarajevo             : Central European Time
  Europe/Simferopol           : Eastern European Time
  Europe/Skopje               : Central European Time
  Europe/Sofia                : Eastern European Time
  Europe/Stockholm            : Central European Time
  Europe/Tallinn              : Eastern European Time
  Europe/Tirane               : Central European Time
  Europe/Tiraspol             : Eastern European Time
  Europe/Uzhgorod             : Eastern European Time
  Europe/Vaduz                : Central European Time
  Europe/Vatican              : Central European Time
  Europe/Vienna               : Central European Time
  Europe/Vilnius              : Eastern European Time
  Europe/Warsaw               : Central European Time
  Europe/Zagreb               : Central European Time
  Europe/Zaporozhye           : Eastern European Time
  Europe/Zurich               : Central European Time
  GB                          : Greenwich Mean Time
  GB-Eire                     : Greenwich Mean Time
  GMT                         : Greenwich Mean Time
  GMT0                        : GMT+00:00
  Greenwich                   : Greenwich Mean Time
  Hongkong                    : Hong Kong Time
  HST                         : Hawaii Standard Time
  Iceland                     : Greenwich Mean Time
  IET                         : Eastern Standard Time
  Indian/Antananarivo         : Eastern African Time
  Indian/Chagos               : Indian Ocean Territory Time
  Indian/Christmas            : Christmas Island Time
  Indian/Cocos                : Cocos Islands Time
  Indian/Comoro               : Eastern African Time
  Indian/Kerguelen            : French Southern & Antarctic Lands Time
  Indian/Mahe                 : Seychelles Time
  Indian/Maldives             : Maldives Time
  Indian/Mauritius            : Mauritius Time
  Indian/Mayotte              : Eastern African Time
  Indian/Reunion              : Reunion Time
  Iran                        : Iran Time
  Israel                      : Israel Standard Time
  IST                         : India Standard Time
  Jamaica                     : Eastern Standard Time
  Japan                       : Japan Standard Time
  JST                         : Japan Standard Time
  Kwajalein                   : Marshall Islands Time
  Libya                       : Eastern European Time
  MET                         : Middle Europe Time
  Mexico/BajaNorte            : Pacific Standard Time
  Mexico/BajaSur              : Mountain Standard Time
  Mexico/General              : Central Standard Time
  Mideast/Riyadh87            : GMT+03:07
  Mideast/Riyadh88            : GMT+03:07
  Mideast/Riyadh89            : GMT+03:07
  MIT                         : West Samoa Time
  MST                         : Mountain Standard Time
  MST7MDT                     : Mountain Standard Time
  Navajo                      : Mountain Standard Time
  NET                         : Armenia Time
  NST                         : New Zealand Standard Time
  NZ                          : New Zealand Standard Time
  NZ-CHAT                     : Chatham Standard Time
  Pacific/Apia                : West Samoa Time
  Pacific/Auckland            : New Zealand Standard Time
  Pacific/Chatham             : Chatham Standard Time
  Pacific/Easter              : Easter Is. Time
  Pacific/Efate               : Vanuatu Time
  Pacific/Enderbury           : Phoenix Is. Time
  Pacific/Fakaofo             : Tokelau Time
  Pacific/Fiji                : Fiji Time
  Pacific/Funafuti            : Tuvalu Time
  Pacific/Galapagos           : Galapagos Time
  Pacific/Gambier             : Gambier Time
  Pacific/Guadalcanal         : Solomon Is. Time
  Pacific/Guam                : Chamorro Standard Time
  Pacific/Honolulu            : Hawaii Standard Time
  Pacific/Johnston            : Hawaii Standard Time
  Pacific/Kiritimati          : Line Is. Time
  Pacific/Kosrae              : Kosrae Time
  Pacific/Kwajalein           : Marshall Islands Time
  Pacific/Majuro              : Marshall Islands Time
  Pacific/Marquesas           : Marquesas Time
  Pacific/Midway              : Samoa Standard Time
  Pacific/Nauru               : Nauru Time
  Pacific/Niue                : Niue Time
  Pacific/Norfolk             : Norfolk Time
  Pacific/Noumea              : New Caledonia Time
  Pacific/Pago_Pago           : Samoa Standard Time
  Pacific/Palau               : Palau Time
  Pacific/Pitcairn            : Pitcairn Standard Time
  Pacific/Ponape              : Ponape Time
  Pacific/Port_Moresby        : Papua New Guinea Time
  Pacific/Rarotonga           : Cook Is. Time
  Pacific/Saipan              : Chamorro Standard Time
  Pacific/Samoa               : Samoa Standard Time
  Pacific/Tahiti              : Tahiti Time
  Pacific/Tarawa              : Gilbert Is. Time
  Pacific/Tongatapu           : Tonga Time
  Pacific/Truk                : Truk Time
  Pacific/Wake                : Wake Time
  Pacific/Wallis              : Wallis & Futuna Time
  Pacific/Yap                 : Yap Time
  PLT                         : Pakistan Time
  PNT                         : Mountain Standard Time
  Poland                      : Central European Time
  Portugal                    : Western European Time
  PRC                         : China Standard Time
  PRT                         : Atlantic Standard Time
  PST                         : Pacific Standard Time
  PST8PDT                     : Pacific Standard Time
  ROK                         : Korea Standard Time
  Singapore                   : Singapore Time
  SST                         : Solomon Is. Time
  SystemV/AST4                : Atlantic Standard Time
  SystemV/AST4ADT             : Atlantic Standard Time
  SystemV/CST6                : Central Standard Time
  SystemV/CST6CDT             : Central Standard Time
  SystemV/EST5                : Eastern Standard Time
  SystemV/EST5EDT             : Eastern Standard Time
  SystemV/HST10               : Hawaii Standard Time
  SystemV/MST7                : Mountain Standard Time
  SystemV/MST7MDT             : Mountain Standard Time
  SystemV/PST8                : Pitcairn Standard Time
  SystemV/PST8PDT             : Pacific Standard Time
  SystemV/YST9                : Gambier Time
  SystemV/YST9YDT             : Alaska Standard Time
  Turkey                      : Eastern European Time
  UCT                         : Coordinated Universal Time
  Universal                   : Coordinated Universal Time
  US/Alaska                   : Alaska Standard Time
  US/Aleutian                 : Hawaii-Aleutian Standard Time
  US/Arizona                  : Mountain Standard Time
  US/Central                  : Central Standard Time
  US/East-Indiana             : Eastern Standard Time
  US/Eastern                  : Eastern Standard Time
  US/Hawaii                   : Hawaii Standard Time
  US/Indiana-Starke           : Eastern Standard Time
  US/Michigan                 : Eastern Standard Time
  US/Mountain                 : Mountain Standard Time
  US/Pacific                  : Pacific Standard Time
  US/Pacific-New              : Pacific Standard Time
  US/Samoa                    : Samoa Standard Time
  VST                         : Indochina Time
  W-SU                        : Moscow Standard Time
  WET                         : Western European Time
  Zulu                        : Coordinated Universal Time