ICU-776 Add ISO 3166 country code index to time zone data and new API to TimeZone

X-SVN-Rev: 3534
This commit is contained in:
Alan Liu 2001-02-02 19:26:56 +00:00
parent 2606207b62
commit a38c004603
14 changed files with 2647 additions and 1407 deletions

File diff suppressed because it is too large Load diff

View file

@ -11,11 +11,11 @@
<table border="0">
<tr>
<td>Version</td>
<td><strong>tzdata2000f</strong> (2000.6)</td>
<td><strong>tzdata2000h</strong> (2000.8)</td>
</tr>
<tr>
<td>Total zone count</td>
<td><strong>421</strong> in <strong>115</strong> equivalency groups</td>
<td><strong>432</strong> in <strong>117</strong> equivalency groups</td>
</tr>
<tr>
<td>Original source</td>
@ -27,7 +27,7 @@
</tr>
<tr>
<td>This document generated</td>
<td><strong>Wed Sep 27 09:26:30 2000</strong></td>
<td><strong>Fri Feb 2 10:34:17 2001</strong></td>
</tr>
</table>
@ -122,29 +122,29 @@ for the host zone offset.</p>
<tr valign=top><td><a name="GMTm900">GMT-9:00</a></td><td><a href="#AST">AST</a>, <a href="#AmericaAnchorage"><b>America/Anchorage</b></a>, <a href="#AmericaJuneau">America/Juneau</a>, <a href="#AmericaNome">America/Nome</a>, <a href="#AmericaYakutat">America/Yakutat</a>, <a href="#EtcGMTp9">Etc/GMT+9</a>, <a href="#PacificGambier">Pacific/Gambier</a></td></tr>
<tr valign=top><td><a name="GMTm800">GMT-8:00</a></td><td><a href="#AmericaDawson">America/Dawson</a>, <a href="#AmericaLos_Angeles"><b>America/Los_Angeles</b></a>, <a href="#AmericaTijuana">America/Tijuana</a>, <a href="#AmericaVancouver">America/Vancouver</a>, <a href="#AmericaWhitehorse">America/Whitehorse</a>, <a href="#EtcGMTp8">Etc/GMT+8</a>, <a href="#PST">PST</a>, <a href="#PacificPitcairn">Pacific/Pitcairn</a></td></tr>
<tr valign=top><td><a name="GMTm700">GMT-7:00</a></td><td><a href="#AmericaBoise">America/Boise</a>, <a href="#AmericaChihuahua">America/Chihuahua</a>, <a href="#AmericaDawson_Creek">America/Dawson_Creek</a>, <a href="#AmericaDenver"><b>America/Denver</b></a>, <a href="#AmericaEdmonton">America/Edmonton</a>, <a href="#AmericaHermosillo">America/Hermosillo</a>, <a href="#AmericaInuvik">America/Inuvik</a>, <a href="#AmericaMazatlan">America/Mazatlan</a>, <a href="#AmericaPhoenix">America/Phoenix</a>, <a href="#AmericaYellowknife">America/Yellowknife</a>, <a href="#EtcGMTp7">Etc/GMT+7</a>, <a href="#MST">MST</a>, <a href="#PNT">PNT</a></td></tr>
<tr valign=top><td><a name="GMTm600">GMT-6:00</a></td><td><a href="#AmericaBelize">America/Belize</a>, <a href="#AmericaCambridge_Bay">America/Cambridge_Bay</a>, <a href="#AmericaCancun">America/Cancun</a>, <a href="#AmericaChicago"><b>America/Chicago</b></a>, <a href="#AmericaCosta_Rica">America/Costa_Rica</a>, <a href="#AmericaEl_Salvador">America/El_Salvador</a>, <a href="#AmericaGuatemala">America/Guatemala</a>, <a href="#AmericaIqaluit">America/Iqaluit</a>, <a href="#AmericaManagua">America/Managua</a>, <a href="#AmericaMenominee">America/Menominee</a>, <a href="#AmericaMerida">America/Merida</a>, <a href="#AmericaMexico_City">America/Mexico_City</a>, <a href="#AmericaMonterrey">America/Monterrey</a>, <a href="#AmericaPangnirtung">America/Pangnirtung</a>, <a href="#AmericaRainy_River">America/Rainy_River</a>, <a href="#AmericaRankin_Inlet">America/Rankin_Inlet</a>, <a href="#AmericaRegina">America/Regina</a>, <a href="#AmericaSwift_Current">America/Swift_Current</a>, <a href="#AmericaTegucigalpa">America/Tegucigalpa</a>, <a href="#AmericaWinnipeg">America/Winnipeg</a>, <a href="#CST">CST</a>, <a href="#EtcGMTp6">Etc/GMT+6</a>, <a href="#PacificEaster">Pacific/Easter</a>, <a href="#PacificGalapagos">Pacific/Galapagos</a></td></tr>
<tr valign=top><td><a name="GMTm500">GMT-5:00</a></td><td><a href="#AmericaBogota">America/Bogota</a>, <a href="#AmericaCayman">America/Cayman</a>, <a href="#AmericaDetroit">America/Detroit</a>, <a href="#AmericaGrand_Turk">America/Grand_Turk</a>, <a href="#AmericaGuayaquil">America/Guayaquil</a>, <a href="#AmericaHavana">America/Havana</a>, <a href="#AmericaIndianaKnox">America/Indiana/Knox</a>, <a href="#AmericaIndianaMarengo">America/Indiana/Marengo</a>, <a href="#AmericaIndianaVevay">America/Indiana/Vevay</a>, <a href="#AmericaIndianapolis"><b>America/Indianapolis</b></a>, <a href="#AmericaJamaica">America/Jamaica</a>, <a href="#AmericaLima">America/Lima</a>, <a href="#AmericaLouisville">America/Louisville</a>, <a href="#AmericaMontreal">America/Montreal</a>, <a href="#AmericaNassau">America/Nassau</a>, <a href="#AmericaNew_York">America/New_York</a>, <a href="#AmericaNipigon">America/Nipigon</a>, <a href="#AmericaPanama">America/Panama</a>, <a href="#AmericaPortmaumPrince">America/Port-au-Prince</a>, <a href="#AmericaPorto_Acre">America/Porto_Acre</a>, <a href="#AmericaThunder_Bay">America/Thunder_Bay</a>, <a href="#EST">EST</a>, <a href="#EtcGMTp5">Etc/GMT+5</a>, <a href="#IET">IET</a></td></tr>
<tr valign=top><td><a name="GMTm600">GMT-6:00</a></td><td><a href="#AmericaBelize">America/Belize</a>, <a href="#AmericaCambridge_Bay">America/Cambridge_Bay</a>, <a href="#AmericaCancun">America/Cancun</a>, <a href="#AmericaChicago"><b>America/Chicago</b></a>, <a href="#AmericaCosta_Rica">America/Costa_Rica</a>, <a href="#AmericaEl_Salvador">America/El_Salvador</a>, <a href="#AmericaGuatemala">America/Guatemala</a>, <a href="#AmericaManagua">America/Managua</a>, <a href="#AmericaMenominee">America/Menominee</a>, <a href="#AmericaMerida">America/Merida</a>, <a href="#AmericaMexico_City">America/Mexico_City</a>, <a href="#AmericaMonterrey">America/Monterrey</a>, <a href="#AmericaRainy_River">America/Rainy_River</a>, <a href="#AmericaRegina">America/Regina</a>, <a href="#AmericaSwift_Current">America/Swift_Current</a>, <a href="#AmericaTegucigalpa">America/Tegucigalpa</a>, <a href="#AmericaWinnipeg">America/Winnipeg</a>, <a href="#CST">CST</a>, <a href="#EtcGMTp6">Etc/GMT+6</a>, <a href="#PacificEaster">Pacific/Easter</a>, <a href="#PacificGalapagos">Pacific/Galapagos</a></td></tr>
<tr valign=top><td><a name="GMTm500">GMT-5:00</a></td><td><a href="#AmericaBogota">America/Bogota</a>, <a href="#AmericaCayman">America/Cayman</a>, <a href="#AmericaDetroit">America/Detroit</a>, <a href="#AmericaEirunepe">America/Eirunepe</a>, <a href="#AmericaGrand_Turk">America/Grand_Turk</a>, <a href="#AmericaGuayaquil">America/Guayaquil</a>, <a href="#AmericaHavana">America/Havana</a>, <a href="#AmericaIndianaKnox">America/Indiana/Knox</a>, <a href="#AmericaIndianaMarengo">America/Indiana/Marengo</a>, <a href="#AmericaIndianaVevay">America/Indiana/Vevay</a>, <a href="#AmericaIndianapolis"><b>America/Indianapolis</b></a>, <a href="#AmericaIqaluit">America/Iqaluit</a>, <a href="#AmericaJamaica">America/Jamaica</a>, <a href="#AmericaKentuckyMonticello">America/Kentucky/Monticello</a>, <a href="#AmericaLima">America/Lima</a>, <a href="#AmericaLouisville">America/Louisville</a>, <a href="#AmericaMontreal">America/Montreal</a>, <a href="#AmericaNassau">America/Nassau</a>, <a href="#AmericaNew_York">America/New_York</a>, <a href="#AmericaNipigon">America/Nipigon</a>, <a href="#AmericaPanama">America/Panama</a>, <a href="#AmericaPangnirtung">America/Pangnirtung</a>, <a href="#AmericaPortmaumPrince">America/Port-au-Prince</a>, <a href="#AmericaPorto_Acre">America/Porto_Acre</a>, <a href="#AmericaRankin_Inlet">America/Rankin_Inlet</a>, <a href="#AmericaThunder_Bay">America/Thunder_Bay</a>, <a href="#EST">EST</a>, <a href="#EtcGMTp5">Etc/GMT+5</a>, <a href="#IET">IET</a></td></tr>
<tr valign=top><td><a name="GMTm400">GMT-4:00</a></td><td><a href="#AmericaAnguilla">America/Anguilla</a>, <a href="#AmericaAntigua">America/Antigua</a>, <a href="#AmericaAruba">America/Aruba</a>, <a href="#AmericaAsuncion">America/Asuncion</a>, <a href="#AmericaBarbados">America/Barbados</a>, <a href="#AmericaBoa_Vista">America/Boa_Vista</a>, <a href="#AmericaCaracas">America/Caracas</a>, <a href="#AmericaCuiaba">America/Cuiaba</a>, <a href="#AmericaCuracao">America/Curacao</a>, <a href="#AmericaDominica">America/Dominica</a>, <a href="#AmericaGlace_Bay">America/Glace_Bay</a>, <a href="#AmericaGoose_Bay">America/Goose_Bay</a>, <a href="#AmericaGrenada">America/Grenada</a>, <a href="#AmericaGuadeloupe">America/Guadeloupe</a>, <a href="#AmericaGuyana">America/Guyana</a>, <a href="#AmericaHalifax">America/Halifax</a>, <a href="#AmericaLa_Paz">America/La_Paz</a>, <a href="#AmericaManaus">America/Manaus</a>, <a href="#AmericaMartinique">America/Martinique</a>, <a href="#AmericaMontserrat">America/Montserrat</a>, <a href="#AmericaPort_of_Spain">America/Port_of_Spain</a>, <a href="#AmericaPorto_Velho">America/Porto_Velho</a>, <a href="#AmericaPuerto_Rico"><b>America/Puerto_Rico</b></a>, <a href="#AmericaSantiago">America/Santiago</a>, <a href="#AmericaSanto_Domingo">America/Santo_Domingo</a>, <a href="#AmericaSt_Kitts">America/St_Kitts</a>, <a href="#AmericaSt_Lucia">America/St_Lucia</a>, <a href="#AmericaSt_Thomas">America/St_Thomas</a>, <a href="#AmericaSt_Vincent">America/St_Vincent</a>, <a href="#AmericaThule">America/Thule</a>, <a href="#AmericaTortola">America/Tortola</a>, <a href="#AntarcticaPalmer">Antarctica/Palmer</a>, <a href="#AtlanticBermuda">Atlantic/Bermuda</a>, <a href="#AtlanticStanley">Atlantic/Stanley</a>, <a href="#EtcGMTp4">Etc/GMT+4</a>, <a href="#PRT">PRT</a></td></tr>
<tr valign=top><td><a name="GMTm330">GMT-3:30</a></td><td><a href="#AmericaSt_Johns"><b>America/St_Johns</b></a>, <a href="#CNT">CNT</a></td></tr>
<tr valign=top><td><a name="GMTm300">GMT-3:00</a></td><td><a href="#AGT">AGT</a>, <a href="#AmericaAraguaina">America/Araguaina</a>, <a href="#AmericaBelem">America/Belem</a>, <a href="#AmericaBuenos_Aires"><b>America/Buenos_Aires</b></a>, <a href="#AmericaCatamarca">America/Catamarca</a>, <a href="#AmericaCayenne">America/Cayenne</a>, <a href="#AmericaCordoba">America/Cordoba</a>, <a href="#AmericaFortaleza">America/Fortaleza</a>, <a href="#AmericaGodthab">America/Godthab</a>, <a href="#AmericaJujuy">America/Jujuy</a>, <a href="#AmericaMaceio">America/Maceio</a>, <a href="#AmericaMendoza">America/Mendoza</a>, <a href="#AmericaMiquelon">America/Miquelon</a>, <a href="#AmericaMontevideo">America/Montevideo</a>, <a href="#AmericaParamaribo">America/Paramaribo</a>, <a href="#AmericaRosario">America/Rosario</a>, <a href="#AmericaSao_Paulo">America/Sao_Paulo</a>, <a href="#BET">BET</a>, <a href="#EtcGMTp3">Etc/GMT+3</a></td></tr>
<tr valign=top><td><a name="GMTm300">GMT-3:00</a></td><td><a href="#AGT">AGT</a>, <a href="#AmericaAraguaina">America/Araguaina</a>, <a href="#AmericaBelem">America/Belem</a>, <a href="#AmericaBuenos_Aires"><b>America/Buenos_Aires</b></a>, <a href="#AmericaCatamarca">America/Catamarca</a>, <a href="#AmericaCayenne">America/Cayenne</a>, <a href="#AmericaCordoba">America/Cordoba</a>, <a href="#AmericaFortaleza">America/Fortaleza</a>, <a href="#AmericaGodthab">America/Godthab</a>, <a href="#AmericaJujuy">America/Jujuy</a>, <a href="#AmericaMaceio">America/Maceio</a>, <a href="#AmericaMendoza">America/Mendoza</a>, <a href="#AmericaMiquelon">America/Miquelon</a>, <a href="#AmericaMontevideo">America/Montevideo</a>, <a href="#AmericaParamaribo">America/Paramaribo</a>, <a href="#AmericaRecife">America/Recife</a>, <a href="#AmericaRosario">America/Rosario</a>, <a href="#AmericaSao_Paulo">America/Sao_Paulo</a>, <a href="#BET">BET</a>, <a href="#EtcGMTp3">Etc/GMT+3</a></td></tr>
<tr valign=top><td><a name="GMTm200">GMT-2:00</a></td><td><a href="#AmericaNoronha"><b>America/Noronha</b></a>, <a href="#AtlanticSouth_Georgia">Atlantic/South_Georgia</a>, <a href="#EtcGMTp2">Etc/GMT+2</a></td></tr>
<tr valign=top><td><a name="GMTm100">GMT-1:00</a></td><td><a href="#AmericaScoresbysund">America/Scoresbysund</a>, <a href="#AtlanticAzores"><b>Atlantic/Azores</b></a>, <a href="#AtlanticCape_Verde">Atlantic/Cape_Verde</a>, <a href="#AtlanticJan_Mayen">Atlantic/Jan_Mayen</a>, <a href="#EtcGMTp1">Etc/GMT+1</a></td></tr>
<tr valign=top><td><a name="GMTp000">GMT+0:00</a></td><td><a href="#AfricaAbidjan">Africa/Abidjan</a>, <a href="#AfricaAccra">Africa/Accra</a>, <a href="#AfricaBamako">Africa/Bamako</a>, <a href="#AfricaBanjul">Africa/Banjul</a>, <a href="#AfricaBissau">Africa/Bissau</a>, <a href="#AfricaCasablanca">Africa/Casablanca</a>, <a href="#AfricaConakry">Africa/Conakry</a>, <a href="#AfricaDakar">Africa/Dakar</a>, <a href="#AfricaEl_Aaiun">Africa/El_Aaiun</a>, <a href="#AfricaFreetown">Africa/Freetown</a>, <a href="#AfricaLome">Africa/Lome</a>, <a href="#AfricaMonrovia">Africa/Monrovia</a>, <a href="#AfricaNouakchott">Africa/Nouakchott</a>, <a href="#AfricaOuagadougou">Africa/Ouagadougou</a>, <a href="#AfricaSao_Tome">Africa/Sao_Tome</a>, <a href="#AfricaTimbuktu">Africa/Timbuktu</a>, <a href="#AtlanticCanary">Atlantic/Canary</a>, <a href="#AtlanticFaeroe">Atlantic/Faeroe</a>, <a href="#AtlanticMadeira">Atlantic/Madeira</a>, <a href="#AtlanticReykjavik">Atlantic/Reykjavik</a>, <a href="#AtlanticSt_Helena">Atlantic/St_Helena</a>, <a href="#EtcGMT">Etc/GMT</a>, <a href="#EtcUCT">Etc/UCT</a>, <a href="#EtcUTC">Etc/UTC</a>, <a href="#EuropeBelfast">Europe/Belfast</a>, <a href="#EuropeDublin">Europe/Dublin</a>, <a href="#EuropeLisbon">Europe/Lisbon</a>, <a href="#EuropeLondon">Europe/London</a>, <a href="#GMT"><b>GMT</b></a>, <a href="#UTC">UTC</a>, <a href="#WET">WET</a></td></tr>
<tr valign=top><td><a name="GMTp100">GMT+1:00</a></td><td><a href="#AfricaAlgiers">Africa/Algiers</a>, <a href="#AfricaBangui">Africa/Bangui</a>, <a href="#AfricaBrazzaville">Africa/Brazzaville</a>, <a href="#AfricaCeuta">Africa/Ceuta</a>, <a href="#AfricaDouala">Africa/Douala</a>, <a href="#AfricaKinshasa">Africa/Kinshasa</a>, <a href="#AfricaLagos">Africa/Lagos</a>, <a href="#AfricaLibreville">Africa/Libreville</a>, <a href="#AfricaLuanda">Africa/Luanda</a>, <a href="#AfricaMalabo">Africa/Malabo</a>, <a href="#AfricaNdjamena">Africa/Ndjamena</a>, <a href="#AfricaNiamey">Africa/Niamey</a>, <a href="#AfricaPortomNovo">Africa/Porto-Novo</a>, <a href="#AfricaTunis">Africa/Tunis</a>, <a href="#AfricaWindhoek">Africa/Windhoek</a>, <a href="#CET">CET</a>, <a href="#ECT">ECT</a>, <a href="#EtcGMTm1">Etc/GMT-1</a>, <a href="#EuropeAmsterdam">Europe/Amsterdam</a>, <a href="#EuropeAndorra">Europe/Andorra</a>, <a href="#EuropeBelgrade">Europe/Belgrade</a>, <a href="#EuropeBerlin">Europe/Berlin</a>, <a href="#EuropeBrussels">Europe/Brussels</a>, <a href="#EuropeBudapest">Europe/Budapest</a>, <a href="#EuropeCopenhagen">Europe/Copenhagen</a>, <a href="#EuropeGibraltar">Europe/Gibraltar</a>, <a href="#EuropeLuxembourg">Europe/Luxembourg</a>, <a href="#EuropeMadrid">Europe/Madrid</a>, <a href="#EuropeMalta">Europe/Malta</a>, <a href="#EuropeMonaco">Europe/Monaco</a>, <a href="#EuropeOslo">Europe/Oslo</a>, <a href="#EuropeParis"><b>Europe/Paris</b></a>, <a href="#EuropePrague">Europe/Prague</a>, <a href="#EuropeRome">Europe/Rome</a>, <a href="#EuropeStockholm">Europe/Stockholm</a>, <a href="#EuropeTirane">Europe/Tirane</a>, <a href="#EuropeVaduz">Europe/Vaduz</a>, <a href="#EuropeVienna">Europe/Vienna</a>, <a href="#EuropeWarsaw">Europe/Warsaw</a>, <a href="#EuropeZurich">Europe/Zurich</a>, <a href="#MET">MET</a></td></tr>
<tr valign=top><td><a name="GMTp100">GMT+1:00</a></td><td><a href="#AfricaAlgiers">Africa/Algiers</a>, <a href="#AfricaBangui">Africa/Bangui</a>, <a href="#AfricaBrazzaville">Africa/Brazzaville</a>, <a href="#AfricaCeuta">Africa/Ceuta</a>, <a href="#AfricaDouala">Africa/Douala</a>, <a href="#AfricaKinshasa">Africa/Kinshasa</a>, <a href="#AfricaLagos">Africa/Lagos</a>, <a href="#AfricaLibreville">Africa/Libreville</a>, <a href="#AfricaLuanda">Africa/Luanda</a>, <a href="#AfricaMalabo">Africa/Malabo</a>, <a href="#AfricaNdjamena">Africa/Ndjamena</a>, <a href="#AfricaNiamey">Africa/Niamey</a>, <a href="#AfricaPortomNovo">Africa/Porto-Novo</a>, <a href="#AfricaTunis">Africa/Tunis</a>, <a href="#AfricaWindhoek">Africa/Windhoek</a>, <a href="#ArcticLongyearbyen">Arctic/Longyearbyen</a>, <a href="#CET">CET</a>, <a href="#ECT">ECT</a>, <a href="#EtcGMTm1">Etc/GMT-1</a>, <a href="#EuropeAmsterdam">Europe/Amsterdam</a>, <a href="#EuropeAndorra">Europe/Andorra</a>, <a href="#EuropeBelgrade">Europe/Belgrade</a>, <a href="#EuropeBerlin">Europe/Berlin</a>, <a href="#EuropeBratislava">Europe/Bratislava</a>, <a href="#EuropeBrussels">Europe/Brussels</a>, <a href="#EuropeBudapest">Europe/Budapest</a>, <a href="#EuropeCopenhagen">Europe/Copenhagen</a>, <a href="#EuropeGibraltar">Europe/Gibraltar</a>, <a href="#EuropeLjubljana">Europe/Ljubljana</a>, <a href="#EuropeLuxembourg">Europe/Luxembourg</a>, <a href="#EuropeMadrid">Europe/Madrid</a>, <a href="#EuropeMalta">Europe/Malta</a>, <a href="#EuropeMonaco">Europe/Monaco</a>, <a href="#EuropeOslo">Europe/Oslo</a>, <a href="#EuropeParis"><b>Europe/Paris</b></a>, <a href="#EuropePrague">Europe/Prague</a>, <a href="#EuropeRome">Europe/Rome</a>, <a href="#EuropeSan_Marino">Europe/San_Marino</a>, <a href="#EuropeSarajevo">Europe/Sarajevo</a>, <a href="#EuropeSkopje">Europe/Skopje</a>, <a href="#EuropeStockholm">Europe/Stockholm</a>, <a href="#EuropeTirane">Europe/Tirane</a>, <a href="#EuropeVaduz">Europe/Vaduz</a>, <a href="#EuropeVatican">Europe/Vatican</a>, <a href="#EuropeVienna">Europe/Vienna</a>, <a href="#EuropeWarsaw">Europe/Warsaw</a>, <a href="#EuropeZagreb">Europe/Zagreb</a>, <a href="#EuropeZurich">Europe/Zurich</a>, <a href="#MET">MET</a></td></tr>
<tr valign=top><td><a name="GMTp200">GMT+2:00</a></td><td><a href="#ART">ART</a>, <a href="#AfricaBlantyre">Africa/Blantyre</a>, <a href="#AfricaBujumbura">Africa/Bujumbura</a>, <a href="#AfricaCairo"><b>Africa/Cairo</b></a>, <a href="#AfricaGaborone">Africa/Gaborone</a>, <a href="#AfricaHarare">Africa/Harare</a>, <a href="#AfricaJohannesburg">Africa/Johannesburg</a>, <a href="#AfricaKigali">Africa/Kigali</a>, <a href="#AfricaLubumbashi">Africa/Lubumbashi</a>, <a href="#AfricaLusaka">Africa/Lusaka</a>, <a href="#AfricaMaputo">Africa/Maputo</a>, <a href="#AfricaMaseru">Africa/Maseru</a>, <a href="#AfricaMbabane">Africa/Mbabane</a>, <a href="#AfricaTripoli">Africa/Tripoli</a>, <a href="#AsiaAmman">Asia/Amman</a>, <a href="#AsiaBeirut">Asia/Beirut</a>, <a href="#AsiaDamascus">Asia/Damascus</a>, <a href="#AsiaGaza">Asia/Gaza</a>, <a href="#AsiaJerusalem">Asia/Jerusalem</a>, <a href="#AsiaNicosia">Asia/Nicosia</a>, <a href="#CAT">CAT</a>, <a href="#EET">EET</a>, <a href="#EtcGMTm2">Etc/GMT-2</a>, <a href="#EuropeAthens">Europe/Athens</a>, <a href="#EuropeBucharest">Europe/Bucharest</a>, <a href="#EuropeChisinau">Europe/Chisinau</a>, <a href="#EuropeHelsinki">Europe/Helsinki</a>, <a href="#EuropeIstanbul">Europe/Istanbul</a>, <a href="#EuropeKaliningrad">Europe/Kaliningrad</a>, <a href="#EuropeKiev">Europe/Kiev</a>, <a href="#EuropeMinsk">Europe/Minsk</a>, <a href="#EuropeRiga">Europe/Riga</a>, <a href="#EuropeSimferopol">Europe/Simferopol</a>, <a href="#EuropeSofia">Europe/Sofia</a>, <a href="#EuropeTallinn">Europe/Tallinn</a>, <a href="#EuropeUzhgorod">Europe/Uzhgorod</a>, <a href="#EuropeVilnius">Europe/Vilnius</a>, <a href="#EuropeZaporozhye">Europe/Zaporozhye</a></td></tr>
<tr valign=top><td><a name="GMTp300">GMT+3:00</a></td><td><a href="#AfricaAddis_Ababa"><b>Africa/Addis_Ababa</b></a>, <a href="#AfricaAsmera">Africa/Asmera</a>, <a href="#AfricaDar_es_Salaam">Africa/Dar_es_Salaam</a>, <a href="#AfricaDjibouti">Africa/Djibouti</a>, <a href="#AfricaKampala">Africa/Kampala</a>, <a href="#AfricaKhartoum">Africa/Khartoum</a>, <a href="#AfricaMogadishu">Africa/Mogadishu</a>, <a href="#AfricaNairobi">Africa/Nairobi</a>, <a href="#AntarcticaSyowa">Antarctica/Syowa</a>, <a href="#AsiaAden">Asia/Aden</a>, <a href="#AsiaBaghdad">Asia/Baghdad</a>, <a href="#AsiaBahrain">Asia/Bahrain</a>, <a href="#AsiaKuwait">Asia/Kuwait</a>, <a href="#AsiaQatar">Asia/Qatar</a>, <a href="#AsiaRiyadh">Asia/Riyadh</a>, <a href="#EAT">EAT</a>, <a href="#EtcGMTm3">Etc/GMT-3</a>, <a href="#EuropeMoscow">Europe/Moscow</a>, <a href="#EuropeTiraspol">Europe/Tiraspol</a>, <a href="#IndianAntananarivo">Indian/Antananarivo</a>, <a href="#IndianComoro">Indian/Comoro</a>, <a href="#IndianMayotte">Indian/Mayotte</a></td></tr>
<tr valign=top><td><a name="GMTp30704">GMT+3:07:04</a></td><td><a href="#AsiaRiyadh87">Asia/Riyadh87</a>, <a href="#AsiaRiyadh88">Asia/Riyadh88</a>, <a href="#AsiaRiyadh89"><b>Asia/Riyadh89</b></a></td></tr>
<tr valign=top><td><a name="GMTp330">GMT+3:30</a></td><td><a href="#AsiaTehran"><b>Asia/Tehran</b></a></td></tr>
<tr valign=top><td><a name="GMTp400">GMT+4:00</a></td><td><a href="#AsiaAqtau">Asia/Aqtau</a>, <a href="#AsiaBaku">Asia/Baku</a>, <a href="#AsiaDubai">Asia/Dubai</a>, <a href="#AsiaMuscat">Asia/Muscat</a>, <a href="#AsiaTbilisi">Asia/Tbilisi</a>, <a href="#AsiaYerevan"><b>Asia/Yerevan</b></a>, <a href="#EtcGMTm4">Etc/GMT-4</a>, <a href="#EuropeSamara">Europe/Samara</a>, <a href="#IndianMahe">Indian/Mahe</a>, <a href="#IndianMauritius">Indian/Mauritius</a>, <a href="#IndianReunion">Indian/Reunion</a>, <a href="#NET">NET</a></td></tr>
<tr valign=top><td><a name="GMTp430">GMT+4:30</a></td><td><a href="#AsiaKabul"><b>Asia/Kabul</b></a></td></tr>
<tr valign=top><td><a name="GMTp500">GMT+5:00</a></td><td><a href="#AsiaAqtobe">Asia/Aqtobe</a>, <a href="#AsiaAshkhabad">Asia/Ashkhabad</a>, <a href="#AsiaBishkek">Asia/Bishkek</a>, <a href="#AsiaDushanbe">Asia/Dushanbe</a>, <a href="#AsiaKarachi"><b>Asia/Karachi</b></a>, <a href="#AsiaSamarkand">Asia/Samarkand</a>, <a href="#AsiaTashkent">Asia/Tashkent</a>, <a href="#AsiaYekaterinburg">Asia/Yekaterinburg</a>, <a href="#EtcGMTm5">Etc/GMT-5</a>, <a href="#IndianChagos">Indian/Chagos</a>, <a href="#IndianKerguelen">Indian/Kerguelen</a>, <a href="#IndianMaldives">Indian/Maldives</a>, <a href="#PLT">PLT</a></td></tr>
<tr valign=top><td><a name="GMTp500">GMT+5:00</a></td><td><a href="#AsiaAqtobe">Asia/Aqtobe</a>, <a href="#AsiaAshgabat">Asia/Ashgabat</a>, <a href="#AsiaBishkek">Asia/Bishkek</a>, <a href="#AsiaDushanbe">Asia/Dushanbe</a>, <a href="#AsiaKarachi"><b>Asia/Karachi</b></a>, <a href="#AsiaSamarkand">Asia/Samarkand</a>, <a href="#AsiaTashkent">Asia/Tashkent</a>, <a href="#AsiaYekaterinburg">Asia/Yekaterinburg</a>, <a href="#EtcGMTm5">Etc/GMT-5</a>, <a href="#IndianChagos">Indian/Chagos</a>, <a href="#IndianKerguelen">Indian/Kerguelen</a>, <a href="#IndianMaldives">Indian/Maldives</a>, <a href="#PLT">PLT</a></td></tr>
<tr valign=top><td><a name="GMTp530">GMT+5:30</a></td><td><a href="#AsiaCalcutta"><b>Asia/Calcutta</b></a>, <a href="#IST">IST</a></td></tr>
<tr valign=top><td><a name="GMTp545">GMT+5:45</a></td><td><a href="#AsiaKatmandu"><b>Asia/Katmandu</b></a></td></tr>
<tr valign=top><td><a name="GMTp600">GMT+6:00</a></td><td><a href="#AntarcticaMawson">Antarctica/Mawson</a>, <a href="#AsiaAlmaty">Asia/Almaty</a>, <a href="#AsiaColombo">Asia/Colombo</a>, <a href="#AsiaDacca"><b>Asia/Dacca</b></a>, <a href="#AsiaNovosibirsk">Asia/Novosibirsk</a>, <a href="#AsiaOmsk">Asia/Omsk</a>, <a href="#AsiaThimbu">Asia/Thimbu</a>, <a href="#BST">BST</a>, <a href="#EtcGMTm6">Etc/GMT-6</a></td></tr>
<tr valign=top><td><a name="GMTp600">GMT+6:00</a></td><td><a href="#AntarcticaMawson">Antarctica/Mawson</a>, <a href="#AsiaAlmaty">Asia/Almaty</a>, <a href="#AsiaColombo">Asia/Colombo</a>, <a href="#AsiaDhaka"><b>Asia/Dhaka</b></a>, <a href="#AsiaNovosibirsk">Asia/Novosibirsk</a>, <a href="#AsiaOmsk">Asia/Omsk</a>, <a href="#AsiaThimphu">Asia/Thimphu</a>, <a href="#BST">BST</a>, <a href="#EtcGMTm6">Etc/GMT-6</a></td></tr>
<tr valign=top><td><a name="GMTp630">GMT+6:30</a></td><td><a href="#AsiaRangoon"><b>Asia/Rangoon</b></a>, <a href="#IndianCocos">Indian/Cocos</a></td></tr>
<tr valign=top><td><a name="GMTp700">GMT+7:00</a></td><td><a href="#AntarcticaDavis">Antarctica/Davis</a>, <a href="#AsiaBangkok">Asia/Bangkok</a>, <a href="#AsiaHovd">Asia/Hovd</a>, <a href="#AsiaJakarta">Asia/Jakarta</a>, <a href="#AsiaKrasnoyarsk">Asia/Krasnoyarsk</a>, <a href="#AsiaPhnom_Penh">Asia/Phnom_Penh</a>, <a href="#AsiaSaigon"><b>Asia/Saigon</b></a>, <a href="#AsiaVientiane">Asia/Vientiane</a>, <a href="#EtcGMTm7">Etc/GMT-7</a>, <a href="#IndianChristmas">Indian/Christmas</a>, <a href="#VST">VST</a></td></tr>
<tr valign=top><td><a name="GMTp800">GMT+8:00</a></td><td><a href="#AntarcticaCasey">Antarctica/Casey</a>, <a href="#AsiaBrunei">Asia/Brunei</a>, <a href="#AsiaChungking">Asia/Chungking</a>, <a href="#AsiaDili">Asia/Dili</a>, <a href="#AsiaHarbin">Asia/Harbin</a>, <a href="#AsiaHong_Kong">Asia/Hong_Kong</a>, <a href="#AsiaIrkutsk">Asia/Irkutsk</a>, <a href="#AsiaKashgar">Asia/Kashgar</a>, <a href="#AsiaKuala_Lumpur">Asia/Kuala_Lumpur</a>, <a href="#AsiaKuching">Asia/Kuching</a>, <a href="#AsiaMacao">Asia/Macao</a>, <a href="#AsiaManila">Asia/Manila</a>, <a href="#AsiaShanghai"><b>Asia/Shanghai</b></a>, <a href="#AsiaSingapore">Asia/Singapore</a>, <a href="#AsiaTaipei">Asia/Taipei</a>, <a href="#AsiaUjung_Pandang">Asia/Ujung_Pandang</a>, <a href="#AsiaUlaanbaatar">Asia/Ulaanbaatar</a>, <a href="#AsiaUrumqi">Asia/Urumqi</a>, <a href="#AustraliaPerth">Australia/Perth</a>, <a href="#CTT">CTT</a>, <a href="#EtcGMTm8">Etc/GMT-8</a></td></tr>
<tr valign=top><td><a name="GMTp900">GMT+9:00</a></td><td><a href="#AsiaJayapura">Asia/Jayapura</a>, <a href="#AsiaPyongyang">Asia/Pyongyang</a>, <a href="#AsiaSeoul">Asia/Seoul</a>, <a href="#AsiaTokyo"><b>Asia/Tokyo</b></a>, <a href="#AsiaYakutsk">Asia/Yakutsk</a>, <a href="#EtcGMTm9">Etc/GMT-9</a>, <a href="#JST">JST</a>, <a href="#PacificPalau">Pacific/Palau</a></td></tr>
<tr valign=top><td><a name="GMTp800">GMT+8:00</a></td><td><a href="#AntarcticaCasey">Antarctica/Casey</a>, <a href="#AsiaBrunei">Asia/Brunei</a>, <a href="#AsiaChungking">Asia/Chungking</a>, <a href="#AsiaHarbin">Asia/Harbin</a>, <a href="#AsiaHong_Kong">Asia/Hong_Kong</a>, <a href="#AsiaIrkutsk">Asia/Irkutsk</a>, <a href="#AsiaKashgar">Asia/Kashgar</a>, <a href="#AsiaKuala_Lumpur">Asia/Kuala_Lumpur</a>, <a href="#AsiaKuching">Asia/Kuching</a>, <a href="#AsiaMacao">Asia/Macao</a>, <a href="#AsiaManila">Asia/Manila</a>, <a href="#AsiaShanghai"><b>Asia/Shanghai</b></a>, <a href="#AsiaSingapore">Asia/Singapore</a>, <a href="#AsiaTaipei">Asia/Taipei</a>, <a href="#AsiaUjung_Pandang">Asia/Ujung_Pandang</a>, <a href="#AsiaUlaanbaatar">Asia/Ulaanbaatar</a>, <a href="#AsiaUrumqi">Asia/Urumqi</a>, <a href="#AustraliaPerth">Australia/Perth</a>, <a href="#CTT">CTT</a>, <a href="#EtcGMTm8">Etc/GMT-8</a></td></tr>
<tr valign=top><td><a name="GMTp900">GMT+9:00</a></td><td><a href="#AsiaDili">Asia/Dili</a>, <a href="#AsiaJayapura">Asia/Jayapura</a>, <a href="#AsiaPyongyang">Asia/Pyongyang</a>, <a href="#AsiaSeoul">Asia/Seoul</a>, <a href="#AsiaTokyo"><b>Asia/Tokyo</b></a>, <a href="#AsiaYakutsk">Asia/Yakutsk</a>, <a href="#EtcGMTm9">Etc/GMT-9</a>, <a href="#JST">JST</a>, <a href="#PacificPalau">Pacific/Palau</a></td></tr>
<tr valign=top><td><a name="GMTp930">GMT+9:30</a></td><td><a href="#ACT">ACT</a>, <a href="#AustraliaAdelaide">Australia/Adelaide</a>, <a href="#AustraliaBroken_Hill">Australia/Broken_Hill</a>, <a href="#AustraliaDarwin"><b>Australia/Darwin</b></a></td></tr>
<tr valign=top><td><a name="GMTp1000">GMT+10:00</a></td><td><a href="#AET">AET</a>, <a href="#AntarcticaDumontDUrville">Antarctica/DumontDUrville</a>, <a href="#AsiaVladivostok">Asia/Vladivostok</a>, <a href="#AustraliaBrisbane">Australia/Brisbane</a>, <a href="#AustraliaHobart">Australia/Hobart</a>, <a href="#AustraliaLindeman">Australia/Lindeman</a>, <a href="#AustraliaMelbourne">Australia/Melbourne</a>, <a href="#AustraliaSydney"><b>Australia/Sydney</b></a>, <a href="#EtcGMTm10">Etc/GMT-10</a>, <a href="#PacificGuam">Pacific/Guam</a>, <a href="#PacificPort_Moresby">Pacific/Port_Moresby</a>, <a href="#PacificSaipan">Pacific/Saipan</a>, <a href="#PacificTruk">Pacific/Truk</a>, <a href="#PacificYap">Pacific/Yap</a></td></tr>
<tr valign=top><td><a name="GMTp1030">GMT+10:30</a></td><td><a href="#AustraliaLord_Howe"><b>Australia/Lord_Howe</b></a></td></tr>
@ -235,13 +235,13 @@ time, depending on which is in effect).</p>
<tr><td><b><a name="AmericaAnchorage">America/Anchorage</a></b></td><td><a href="#GMTm900">GMT-9:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias </em> <a href="#AST">AST</a></td></tr>
<tr><td><a name="AmericaAnguilla">America/Anguilla</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaAntigua">America/Antigua</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaAraguaina">America/Araguaina</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaAraguaina">America/Araguaina</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaAruba">America/Aruba</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaAsuncion">America/Asuncion</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaAsuncion">America/Asuncion</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaBarbados">America/Barbados</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=15 2:00</td><td nowrap>Sep 25 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaBelem">America/Belem</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaBelize">America/Belize</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Dec 18 0:00</td><td nowrap>Feb 12 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaBoa_Vista">America/Boa_Vista</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaBoa_Vista">America/Boa_Vista</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaBogota">America/Bogota</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>May 2 0:00</td><td nowrap>Dec 31 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaBoise">America/Boise</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AmericaBuenos_Aires">America/Buenos_Aires</a></b></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#AGT">AGT</a></td></tr>
@ -255,7 +255,7 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaChihuahua">America/Chihuahua</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaCordoba">America/Cordoba</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaCosta_Rica">America/Costa_Rica</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Jan Sat>=15 0:00</td><td nowrap>Mar 15 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaCuiaba">America/Cuiaba</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaCuiaba">America/Cuiaba</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaCuracao">America/Curacao</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaDawson">America/Dawson</a></td><td><a href="#GMTm800">GMT-8:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaDawson_Creek">America/Dawson_Creek</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td colspan=3></td><td></td></tr>
@ -263,11 +263,12 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaDetroit">America/Detroit</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaDominica">America/Dominica</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaEdmonton">America/Edmonton</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaEirunepe">America/Eirunepe</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaEl_Salvador">America/El_Salvador</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>May Sun>=1 0:00</td><td nowrap>Sep lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaFortaleza">America/Fortaleza</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaFortaleza">America/Fortaleza</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaGlace_Bay">America/Glace_Bay</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaGodthab">America/Godthab</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaGoose_Bay">America/Goose_Bay</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaGoose_Bay">America/Goose_Bay</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 0:01</td><td nowrap>Oct lastSun 0:01</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaGrand_Turk">America/Grand_Turk</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaGrenada">America/Grenada</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaGuadeloupe">America/Guadeloupe</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
@ -282,15 +283,16 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaIndianaVevay">America/Indiana/Vevay</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AmericaIndianapolis">America/Indianapolis</a></b></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#IET">IET</a></td></tr>
<tr><td><a name="AmericaInuvik">America/Inuvik</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaIqaluit">America/Iqaluit</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaIqaluit">America/Iqaluit</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaJamaica">America/Jamaica</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaJujuy">America/Jujuy</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaJuneau">America/Juneau</a></td><td><a href="#GMTm900">GMT-9:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaKentuckyMonticello">America/Kentucky/Monticello</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaLa_Paz">America/La_Paz</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaLima">America/Lima</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Jan 1 0:00</td><td nowrap>Apr 1 0:00</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AmericaLos_Angeles">America/Los_Angeles</a></b></td><td><a href="#GMTm800">GMT-8:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias </em> <a href="#PST">PST</a></td></tr>
<tr><td><a name="AmericaLouisville">America/Louisville</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaMaceio">America/Maceio</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaMaceio">America/Maceio</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaManagua">America/Managua</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaManaus">America/Manaus</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaMartinique">America/Martinique</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
@ -310,7 +312,7 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaNome">America/Nome</a></td><td><a href="#GMTm900">GMT-9:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AmericaNoronha">America/Noronha</a></b></td><td><a href="#GMTm200">GMT-2:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaPanama">America/Panama</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaPangnirtung">America/Pangnirtung</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaPangnirtung">America/Pangnirtung</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaParamaribo">America/Paramaribo</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaPhoenix">America/Phoenix</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#PNT">PNT</a></td></tr>
<tr><td><a name="AmericaPortmaumPrince">America/Port-au-Prince</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 1:00s</td><td nowrap>Oct lastSun 1:00s</td><td>1:00</td><td></td></tr>
@ -319,14 +321,15 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaPorto_Velho">America/Porto_Velho</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AmericaPuerto_Rico">America/Puerto_Rico</a></b></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#PRT">PRT</a></td></tr>
<tr><td><a name="AmericaRainy_River">America/Rainy_River</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaRankin_Inlet">America/Rankin_Inlet</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaRankin_Inlet">America/Rankin_Inlet</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaRecife">America/Recife</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaRegina">America/Regina</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaRosario">America/Rosario</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaSantiago">America/Santiago</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=9 0:00</td><td nowrap>Mar Sun>=9 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaSanto_Domingo">America/Santo_Domingo</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaSao_Paulo">America/Sao_Paulo</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td><em>alias </em> <a href="#BET">BET</a></td></tr>
<tr><td><a name="AmericaSao_Paulo">America/Sao_Paulo</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td><em>alias </em> <a href="#BET">BET</a></td></tr>
<tr><td><a name="AmericaScoresbysund">America/Scoresbysund</a></td><td><a href="#GMTm100">GMT-1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AmericaSt_Johns">America/St_Johns</a></b></td><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias </em> <a href="#CNT">CNT</a></td></tr>
<tr><td><b><a name="AmericaSt_Johns">America/St_Johns</a></b></td><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 0:01</td><td nowrap>Oct lastSun 0:01</td><td>1:00</td><td><em>alias </em> <a href="#CNT">CNT</a></td></tr>
<tr><td><a name="AmericaSt_Kitts">America/St_Kitts</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaSt_Lucia">America/St_Lucia</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaSt_Thomas">America/St_Thomas</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
@ -339,7 +342,7 @@ time, depending on which is in effect).</p>
<tr><td><a name="AmericaTortola">America/Tortola</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AmericaVancouver">America/Vancouver</a></td><td><a href="#GMTm800">GMT-8:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaWhitehorse">America/Whitehorse</a></td><td><a href="#GMTm800">GMT-8:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaWinnipeg">America/Winnipeg</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaWinnipeg">America/Winnipeg</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaYakutat">America/Yakutat</a></td><td><a href="#GMTm900">GMT-9:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AmericaYellowknife">America/Yellowknife</a></td><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AntarcticaCasey">Antarctica/Casey</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td></td></tr>
@ -349,13 +352,14 @@ time, depending on which is in effect).</p>
<tr><td><a name="AntarcticaMcMurdo">Antarctica/McMurdo</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td nowrap>Oct Sun>=1 2:00s</td><td nowrap>Mar Sun>=15 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AntarcticaPalmer">Antarctica/Palmer</a></td><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=9 0:00</td><td nowrap>Mar Sun>=9 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AntarcticaSyowa">Antarctica/Syowa</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="ArcticLongyearbyen">Arctic/Longyearbyen</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAden">Asia/Aden</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaAlmaty">Asia/Almaty</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAmman">Asia/Amman</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastThu 0:00s</td><td nowrap>Sep lastThu 0:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAnadyr">Asia/Anadyr</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAqtau">Asia/Aqtau</a></td><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAqtobe">Asia/Aqtobe</a></td><td><a href="#GMTp500">GMT+5:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaAshkhabad">Asia/Ashkhabad</a></td><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaAshgabat">Asia/Ashgabat</a></td><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaBaghdad">Asia/Baghdad</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td nowrap>Apr 1 3:00s</td><td nowrap>Oct 1 3:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaBahrain">Asia/Bahrain</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaBaku">Asia/Baku</a></td><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 1:00</td><td nowrap>Oct lastSun 1:00</td><td>1:00</td><td></td></tr>
@ -366,9 +370,9 @@ time, depending on which is in effect).</p>
<tr><td><b><a name="AsiaCalcutta">Asia/Calcutta</a></b></td><td><a href="#GMTp530">GMT+5:30</a></td><td colspan=3></td><td><em>alias </em> <a href="#IST">IST</a></td></tr>
<tr><td><a name="AsiaChungking">Asia/Chungking</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Apr Sun>=10 0:00</td><td nowrap>Sep Sun>=11 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaColombo">Asia/Colombo</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AsiaDacca">Asia/Dacca</a></b></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#BST">BST</a></td></tr>
<tr><td><a name="AsiaDamascus">Asia/Damascus</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 0:00</td><td nowrap>Oct 1 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaDili">Asia/Dili</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AsiaDhaka">Asia/Dhaka</a></b></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#BST">BST</a></td></tr>
<tr><td><a name="AsiaDili">Asia/Dili</a></td><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaDubai">Asia/Dubai</a></td><td><a href="#GMTp400">GMT+4:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaDushanbe">Asia/Dushanbe</a></td><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaGaza">Asia/Gaza</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr Fri>=15 0:00</td><td nowrap>Oct Fri>=15 0:00</td><td>1:00</td><td></td></tr>
@ -378,7 +382,7 @@ time, depending on which is in effect).</p>
<tr><td><a name="AsiaIrkutsk">Asia/Irkutsk</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaJakarta">Asia/Jakarta</a></td><td><a href="#GMTp700">GMT+7:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaJayapura">Asia/Jayapura</a></td><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaJerusalem">Asia/Jerusalem</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 1:00</td><td nowrap>Oct 6 1:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaJerusalem">Asia/Jerusalem</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 1:00</td><td nowrap>Sep 24 1:00</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AsiaKabul">Asia/Kabul</a></b></td><td><a href="#GMTp430">GMT+4:30</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaKamchatka">Asia/Kamchatka</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AsiaKarachi">Asia/Karachi</a></b></td><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#PLT">PLT</a></td></tr>
@ -411,8 +415,8 @@ time, depending on which is in effect).</p>
<tr><td><a name="AsiaTaipei">Asia/Taipei</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Jun 30 0:00</td><td nowrap>Sep 30 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaTashkent">Asia/Tashkent</a></td><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaTbilisi">Asia/Tbilisi</a></td><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="AsiaTehran">Asia/Tehran</a></b></td><td><a href="#GMTp330">GMT+3:30</a></td><td nowrap>Mar 20 0:00</td><td nowrap>Sep 22 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaThimbu">Asia/Thimbu</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AsiaTehran">Asia/Tehran</a></b></td><td><a href="#GMTp330">GMT+3:30</a></td><td nowrap>Mar 20 0:00</td><td nowrap>Sep 23 0:00</td><td>1:00</td><td></td></tr>
<tr><td><a name="AsiaThimphu">Asia/Thimphu</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AsiaTokyo">Asia/Tokyo</a></b></td><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#JST">JST</a></td></tr>
<tr><td><a name="AsiaUjung_Pandang">Asia/Ujung_Pandang</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="AsiaUlaanbaatar">Asia/Ulaanbaatar</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Sep lastSun 0:00</td><td>1:00</td><td></td></tr>
@ -443,18 +447,18 @@ time, depending on which is in effect).</p>
<tr><td><a name="AustraliaMelbourne">Australia/Melbourne</a></td><td><a href="#GMTp1000">GMT+10:00</a></td><td nowrap>Oct lastSun 2:00s</td><td nowrap>Mar lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="AustraliaPerth">Australia/Perth</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><b><a name="AustraliaSydney">Australia/Sydney</a></b></td><td><a href="#GMTp1000">GMT+10:00</a></td><td nowrap>Oct lastSun 2:00s</td><td nowrap>Mar lastSun 2:00s</td><td>1:00</td><td><em>alias </em> <a href="#AET">AET</a></td></tr>
<tr><td><a name="BET">BET</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaSao_Paulo">America/Sao_Paulo</a></td></tr>
<tr><td><a name="BST">BST</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#AsiaDacca">Asia/Dacca</a></td></tr>
<tr><td><a name="BET">BET</a></td><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaSao_Paulo">America/Sao_Paulo</a></td></tr>
<tr><td><a name="BST">BST</a></td><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#AsiaDhaka">Asia/Dhaka</a></td></tr>
<tr><td><a name="CAT">CAT</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#AfricaHarare">Africa/Harare</a></td></tr>
<tr><td><a name="CET">CET</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="CNT">CNT</a></td><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaSt_Johns">America/St_Johns</a></td></tr>
<tr><td><a name="CNT">CNT</a></td><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 0:01</td><td nowrap>Oct lastSun 0:01</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaSt_Johns">America/St_Johns</a></td></tr>
<tr><td><a name="CST">CST</a></td><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaChicago">America/Chicago</a></td></tr>
<tr><td><a name="CTT">CTT</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Apr Sun>=10 0:00</td><td nowrap>Sep Sun>=11 0:00</td><td>1:00</td><td><em>alias for</em> <a href="#AsiaShanghai">Asia/Shanghai</a></td></tr>
<tr><td><a name="EAT">EAT</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#AfricaAddis_Ababa">Africa/Addis_Ababa</a></td></tr>
<tr><td><a name="ECT">ECT</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td><em>alias for</em> <a href="#EuropeParis">Europe/Paris</a></td></tr>
<tr><td><a name="EET">EET</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EST">EST</a></td><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td><em>alias for</em> <a href="#AmericaNew_York">America/New_York</a></td></tr>
<tr><td><a name="EtcGMT">Etc/GMT</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#UTC">UTC</a></td></tr>
<tr><td><a name="EtcGMT">Etc/GMT</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcGMTp1">Etc/GMT+1</a></td><td><a href="#GMTm100">GMT-1:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcGMTp10">Etc/GMT+10</a></td><td><a href="#GMTm1000">GMT-10:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcGMTp11">Etc/GMT+11</a></td><td><a href="#GMTm1100">GMT-11:00</a></td><td colspan=3></td><td></td></tr>
@ -482,13 +486,14 @@ time, depending on which is in effect).</p>
<tr><td><a name="EtcGMTm8">Etc/GMT-8</a></td><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcGMTm9">Etc/GMT-9</a></td><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcUCT">Etc/UCT</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcUTC">Etc/UTC</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EtcUTC">Etc/UTC</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td><em>alias </em> <a href="#UTC">UTC</a></td></tr>
<tr><td><a name="EuropeAmsterdam">Europe/Amsterdam</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeAndorra">Europe/Andorra</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeAthens">Europe/Athens</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBelfast">Europe/Belfast</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBelgrade">Europe/Belgrade</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBerlin">Europe/Berlin</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBratislava">Europe/Bratislava</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBrussels">Europe/Brussels</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBucharest">Europe/Bucharest</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeBudapest">Europe/Budapest</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
@ -501,6 +506,7 @@ time, depending on which is in effect).</p>
<tr><td><a name="EuropeKaliningrad">Europe/Kaliningrad</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeKiev">Europe/Kiev</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeLisbon">Europe/Lisbon</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeLjubljana">Europe/Ljubljana</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeLondon">Europe/London</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeLuxembourg">Europe/Luxembourg</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeMadrid">Europe/Madrid</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
@ -514,7 +520,10 @@ time, depending on which is in effect).</p>
<tr><td><a name="EuropeRiga">Europe/Riga</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EuropeRome">Europe/Rome</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSamara">Europe/Samara</a></td><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSan_Marino">Europe/San_Marino</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSarajevo">Europe/Sarajevo</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSimferopol">Europe/Simferopol</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSkopje">Europe/Skopje</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeSofia">Europe/Sofia</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeStockholm">Europe/Stockholm</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeTallinn">Europe/Tallinn</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td colspan=3></td><td></td></tr>
@ -522,9 +531,11 @@ time, depending on which is in effect).</p>
<tr><td><a name="EuropeTiraspol">Europe/Tiraspol</a></td><td><a href="#GMTp300">GMT+3:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeUzhgorod">Europe/Uzhgorod</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeVaduz">Europe/Vaduz</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeVatican">Europe/Vatican</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeVienna">Europe/Vienna</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeVilnius">Europe/Vilnius</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="EuropeWarsaw">Europe/Warsaw</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeZagreb">Europe/Zagreb</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeZaporozhye">Europe/Zaporozhye</a></td><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><a name="EuropeZurich">Europe/Zurich</a></td><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
<tr><td><b><a name="GMT">GMT</a></b></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td></td></tr>
@ -586,13 +597,13 @@ time, depending on which is in effect).</p>
<tr><td><a name="PacificSaipan">Pacific/Saipan</a></td><td><a href="#GMTp1000">GMT+10:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificTahiti">Pacific/Tahiti</a></td><td><a href="#GMTm1000">GMT-10:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificTarawa">Pacific/Tarawa</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificTongatapu">Pacific/Tongatapu</a></td><td><a href="#GMTp1300">GMT+13:00</a></td><td nowrap>Oct Sat>=1 2:00s</td><td nowrap>Apr Sun>=16 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="PacificTongatapu">Pacific/Tongatapu</a></td><td><a href="#GMTp1300">GMT+13:00</a></td><td nowrap>Nov 4 2:00s</td><td nowrap>Jan 27 2:00s</td><td>1:00</td><td></td></tr>
<tr><td><a name="PacificTruk">Pacific/Truk</a></td><td><a href="#GMTp1000">GMT+10:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificWake">Pacific/Wake</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificWallis">Pacific/Wallis</a></td><td><a href="#GMTp1200">GMT+12:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="PacificYap">Pacific/Yap</a></td><td><a href="#GMTp1000">GMT+10:00</a></td><td colspan=3></td><td></td></tr>
<tr><td><a name="SST">SST</a></td><td><a href="#GMTp1100">GMT+11:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#PacificGuadalcanal">Pacific/Guadalcanal</a></td></tr>
<tr><td><a name="UTC">UTC</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#EtcGMT">Etc/GMT</a></td></tr>
<tr><td><a name="UTC">UTC</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#EtcUTC">Etc/UTC</a></td></tr>
<tr><td><a name="VST">VST</a></td><td><a href="#GMTp700">GMT+7:00</a></td><td colspan=3></td><td><em>alias for</em> <a href="#AsiaSaigon">Asia/Saigon</a></td></tr>
<tr><td><a name="WET">WET</a></td><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td></td></tr>
</table>
@ -626,32 +637,34 @@ a given zone is negligible.</p>
<tr valign=top><td><a href="#GMTm700">GMT-7:00</a></td><td colspan=3></td><td>America/Dawson_Creek America/Hermosillo America/Phoenix Etc/GMT+7 PNT</td></tr>
<tr valign=top><td><a href="#GMTm700">GMT-7:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Boise America/Chihuahua America/Denver America/Edmonton America/Inuvik America/Mazatlan America/Yellowknife MST</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td colspan=3></td><td>America/Managua America/Regina America/Swift_Current Etc/GMT+6 Pacific/Galapagos</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Cambridge_Bay America/Cancun America/Chicago America/Iqaluit America/Menominee America/Merida America/Mexico_City America/Monterrey America/Pangnirtung America/Rainy_River America/Rankin_Inlet America/Winnipeg CST</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Cambridge_Bay America/Cancun America/Chicago America/Menominee America/Merida America/Mexico_City America/Monterrey America/Rainy_River CST</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>America/Winnipeg</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Dec 18 0:00</td><td nowrap>Feb 12 0:00</td><td>1:00</td><td>America/Belize</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Jan Sat>=15 0:00</td><td nowrap>Mar 15 0:00</td><td>1:00</td><td>America/Costa_Rica</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Mar 23 0:00</td><td nowrap>Sep 7 0:00</td><td>1:00</td><td>America/Guatemala</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>May Sun>=1 0:00</td><td nowrap>Sep lastSun 0:00</td><td>1:00</td><td>America/El_Salvador America/Tegucigalpa</td></tr>
<tr valign=top><td><a href="#GMTm600">GMT-6:00</a></td><td nowrap>Oct Sun>=9 0:00</td><td nowrap>Mar Sun>=9 0:00</td><td>1:00</td><td>Pacific/Easter</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td>America/Cayman America/Guayaquil America/Indiana/Knox America/Indiana/Marengo America/Indiana/Vevay America/Indianapolis America/Jamaica America/Panama America/Porto_Acre Etc/GMT+5 IET</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td colspan=3></td><td>America/Cayman America/Eirunepe America/Guayaquil America/Indiana/Knox America/Indiana/Marengo America/Indiana/Vevay America/Indianapolis America/Iqaluit America/Jamaica America/Panama America/Pangnirtung America/Porto_Acre America/Rankin_Inlet Etc/GMT+5 IET</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td>America/Grand_Turk</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 0:00s</td><td nowrap>Oct lastSun 0:00s</td><td>1:00</td><td>America/Havana</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 1:00s</td><td nowrap>Oct lastSun 1:00s</td><td>1:00</td><td>America/Port-au-Prince</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Detroit America/Louisville America/Montreal America/Nassau America/New_York America/Nipigon America/Thunder_Bay EST</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Detroit America/Kentucky/Monticello America/Louisville America/Montreal America/Nassau America/New_York America/Nipigon America/Thunder_Bay EST</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>Jan 1 0:00</td><td nowrap>Apr 1 0:00</td><td>1:00</td><td>America/Lima</td></tr>
<tr valign=top><td><a href="#GMTm500">GMT-5:00</a></td><td nowrap>May 2 0:00</td><td nowrap>Dec 31 0:00</td><td>1:00</td><td>America/Bogota</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td>America/Anguilla America/Antigua America/Aruba America/Caracas America/Curacao America/Dominica America/Grenada America/Guadeloupe America/Guyana America/La_Paz America/Manaus America/Martinique America/Montserrat America/Port_of_Spain America/Porto_Velho America/Puerto_Rico America/Santo_Domingo America/St_Kitts America/St_Lucia America/St_Thomas America/St_Vincent America/Tortola Etc/GMT+4 PRT</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Glace_Bay America/Goose_Bay America/Halifax America/Thule Atlantic/Bermuda</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td colspan=3></td><td>America/Anguilla America/Antigua America/Aruba America/Boa_Vista America/Caracas America/Curacao America/Dominica America/Grenada America/Guadeloupe America/Guyana America/La_Paz America/Manaus America/Martinique America/Montserrat America/Port_of_Spain America/Porto_Velho America/Puerto_Rico America/Santo_Domingo America/St_Kitts America/St_Lucia America/St_Thomas America/St_Vincent America/Tortola Etc/GMT+4 PRT</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 0:01</td><td nowrap>Oct lastSun 0:01</td><td>1:00</td><td>America/Goose_Bay</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Glace_Bay America/Halifax America/Thule Atlantic/Bermuda</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Apr Sun>=15 2:00</td><td nowrap>Sep 25 2:00</td><td>1:00</td><td>America/Barbados</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td>America/Boa_Vista America/Cuiaba</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td>America/Asuncion</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td>America/Asuncion</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td>America/Cuiaba</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Oct Sun>=9 0:00</td><td nowrap>Mar Sun>=9 0:00</td><td>1:00</td><td>America/Santiago Antarctica/Palmer</td></tr>
<tr valign=top><td><a href="#GMTm400">GMT-4:00</a></td><td nowrap>Sep Sun>=8 0:00</td><td nowrap>Apr Sun>=16 0:00</td><td>1:00</td><td>Atlantic/Stanley</td></tr>
<tr valign=top><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/St_Johns CNT</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td>AGT America/Belem America/Buenos_Aires America/Catamarca America/Cayenne America/Cordoba America/Jujuy America/Mendoza America/Paramaribo America/Rosario Etc/GMT+3</td></tr>
<tr valign=top><td><a href="#GMTm330">GMT-3:30</a></td><td nowrap>Apr Sun>=1 0:01</td><td nowrap>Oct lastSun 0:01</td><td>1:00</td><td>America/St_Johns CNT</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td colspan=3></td><td>AGT America/Belem America/Buenos_Aires America/Catamarca America/Cayenne America/Cordoba America/Fortaleza America/Jujuy America/Maceio America/Mendoza America/Paramaribo America/Recife America/Rosario Etc/GMT+3</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Apr Sun>=1 2:00</td><td nowrap>Oct lastSun 2:00</td><td>1:00</td><td>America/Miquelon</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td>America/Godthab</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct 18 0:00</td><td nowrap>Feb 28 0:00</td><td>1:00</td><td>America/Montevideo</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=1 0:00</td><td nowrap>Feb lastSun 0:00</td><td>1:00</td><td>America/Araguaina America/Fortaleza America/Maceio America/Sao_Paulo BET</td></tr>
<tr valign=top><td><a href="#GMTm300">GMT-3:00</a></td><td nowrap>Oct Sun>=8 0:00</td><td nowrap>Feb Sun>=15 0:00</td><td>1:00</td><td>America/Araguaina America/Sao_Paulo BET</td></tr>
<tr valign=top><td><a href="#GMTm200">GMT-2:00</a></td><td colspan=3></td><td>America/Noronha Atlantic/South_Georgia Etc/GMT+2</td></tr>
<tr valign=top><td><a href="#GMTm100">GMT-1:00</a></td><td colspan=3></td><td>Atlantic/Cape_Verde Atlantic/Jan_Mayen Etc/GMT+1</td></tr>
<tr valign=top><td><a href="#GMTm100">GMT-1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td>America/Scoresbysund Atlantic/Azores</td></tr>
@ -660,13 +673,13 @@ a given zone is negligible.</p>
<tr valign=top><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td>Atlantic/Canary Atlantic/Faeroe Atlantic/Madeira Europe/Belfast Europe/Dublin Europe/Lisbon Europe/London WET</td></tr>
<tr valign=top><td><a href="#GMTp000">GMT+0:00</a></td><td nowrap>Sep 1 0:00</td><td nowrap>Dec 31 0:00</td><td>0:20</td><td>Africa/Accra</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td colspan=3></td><td>Africa/Algiers Africa/Bangui Africa/Brazzaville Africa/Douala Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Luanda Africa/Malabo Africa/Ndjamena Africa/Niamey Africa/Porto-Novo Etc/GMT-1</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td>Africa/Ceuta ECT Europe/Amsterdam Europe/Andorra Europe/Belgrade Europe/Berlin Europe/Brussels Europe/Budapest Europe/Copenhagen Europe/Gibraltar Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Monaco Europe/Oslo Europe/Paris Europe/Prague Europe/Rome Europe/Stockholm Europe/Tirane Europe/Vaduz Europe/Vienna Europe/Warsaw Europe/Zurich</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 1:00u</td><td nowrap>Oct lastSun 1:00u</td><td>1:00</td><td>Africa/Ceuta Arctic/Longyearbyen ECT Europe/Amsterdam Europe/Andorra Europe/Belgrade Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Budapest Europe/Copenhagen Europe/Gibraltar Europe/Ljubljana Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Monaco Europe/Oslo Europe/Paris Europe/Prague Europe/Rome Europe/San_Marino Europe/Sarajevo Europe/Skopje Europe/Stockholm Europe/Tirane Europe/Vaduz Europe/Vatican Europe/Vienna Europe/Warsaw Europe/Zagreb Europe/Zurich</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>CET MET</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>May 1 0:00s</td><td nowrap>Sep lastSun 0:00s</td><td>1:00</td><td>Africa/Tunis</td></tr>
<tr valign=top><td><a href="#GMTp100">GMT+1:00</a></td><td nowrap>Sep Sun>=1 2:00</td><td nowrap>Apr Sun>=1 2:00</td><td>1:00</td><td>Africa/Windhoek</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td colspan=3></td><td>Africa/Blantyre Africa/Bujumbura Africa/Gaborone Africa/Harare Africa/Kigali Africa/Lubumbashi Africa/Lusaka Africa/Maputo Africa/Maseru Africa/Mbabane Africa/Tripoli CAT Etc/GMT-2 Europe/Riga Europe/Tallinn Europe/Vilnius</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 0:00</td><td nowrap>Oct 1 0:00</td><td>1:00</td><td>Asia/Damascus</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 1:00</td><td nowrap>Oct 6 1:00</td><td>1:00</td><td>Asia/Jerusalem</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr 1 1:00</td><td nowrap>Sep 24 1:00</td><td>1:00</td><td>Asia/Jerusalem</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr Fri>=15 0:00</td><td nowrap>Oct Fri>=15 0:00</td><td>1:00</td><td>Asia/Gaza</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Apr lastFri 0:00s</td><td nowrap>Sep lastThu 23:00s</td><td>1:00</td><td>ART Africa/Cairo</td></tr>
<tr valign=top><td><a href="#GMTp200">GMT+2:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td>Asia/Beirut</td></tr>
@ -678,33 +691,33 @@ a given zone is negligible.</p>
<tr valign=top><td><a href="#GMTp300">GMT+3:00</a></td><td nowrap>Apr 1 3:00s</td><td nowrap>Oct 1 3:00s</td><td>1:00</td><td>Asia/Baghdad</td></tr>
<tr valign=top><td><a href="#GMTp300">GMT+3:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Europe/Moscow Europe/Tiraspol</td></tr>
<tr valign=top><td><a href="#GMTp30704">GMT+3:07:04</a></td><td colspan=3></td><td>Asia/Riyadh87 Asia/Riyadh88 Asia/Riyadh89</td></tr>
<tr valign=top><td><a href="#GMTp330">GMT+3:30</a></td><td nowrap>Mar 20 0:00</td><td nowrap>Sep 22 0:00</td><td>1:00</td><td>Asia/Tehran</td></tr>
<tr valign=top><td><a href="#GMTp330">GMT+3:30</a></td><td nowrap>Mar 20 0:00</td><td nowrap>Sep 23 0:00</td><td>1:00</td><td>Asia/Tehran</td></tr>
<tr valign=top><td><a href="#GMTp400">GMT+4:00</a></td><td colspan=3></td><td>Asia/Dubai Asia/Muscat Etc/GMT-4 Indian/Mahe Indian/Mauritius Indian/Reunion</td></tr>
<tr valign=top><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td>Asia/Aqtau Asia/Tbilisi</td></tr>
<tr valign=top><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 1:00</td><td nowrap>Oct lastSun 1:00</td><td>1:00</td><td>Asia/Baku</td></tr>
<tr valign=top><td><a href="#GMTp400">GMT+4:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Yerevan Europe/Samara NET</td></tr>
<tr valign=top><td><a href="#GMTp430">GMT+4:30</a></td><td colspan=3></td><td>Asia/Kabul</td></tr>
<tr valign=top><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td>Asia/Ashkhabad Asia/Dushanbe Asia/Karachi Asia/Samarkand Asia/Tashkent Etc/GMT-5 Indian/Chagos Indian/Kerguelen Indian/Maldives PLT</td></tr>
<tr valign=top><td><a href="#GMTp500">GMT+5:00</a></td><td colspan=3></td><td>Asia/Ashgabat Asia/Dushanbe Asia/Karachi Asia/Samarkand Asia/Tashkent Etc/GMT-5 Indian/Chagos Indian/Kerguelen Indian/Maldives PLT</td></tr>
<tr valign=top><td><a href="#GMTp500">GMT+5:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td>Asia/Aqtobe</td></tr>
<tr valign=top><td><a href="#GMTp500">GMT+5:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Yekaterinburg</td></tr>
<tr valign=top><td><a href="#GMTp500">GMT+5:00</a></td><td nowrap>Mar lastSun 2:30</td><td nowrap>Oct lastSun 2:30</td><td>1:00</td><td>Asia/Bishkek</td></tr>
<tr valign=top><td><a href="#GMTp530">GMT+5:30</a></td><td colspan=3></td><td>Asia/Calcutta IST</td></tr>
<tr valign=top><td><a href="#GMTp545">GMT+5:45</a></td><td colspan=3></td><td>Asia/Katmandu</td></tr>
<tr valign=top><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td>Antarctica/Mawson Asia/Colombo Asia/Dacca Asia/Thimbu BST Etc/GMT-6</td></tr>
<tr valign=top><td><a href="#GMTp600">GMT+6:00</a></td><td colspan=3></td><td>Antarctica/Mawson Asia/Colombo Asia/Dhaka Asia/Thimphu BST Etc/GMT-6</td></tr>
<tr valign=top><td><a href="#GMTp600">GMT+6:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Oct lastSun 0:00</td><td>1:00</td><td>Asia/Almaty</td></tr>
<tr valign=top><td><a href="#GMTp600">GMT+6:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Novosibirsk Asia/Omsk</td></tr>
<tr valign=top><td><a href="#GMTp630">GMT+6:30</a></td><td colspan=3></td><td>Asia/Rangoon Indian/Cocos</td></tr>
<tr valign=top><td><a href="#GMTp700">GMT+7:00</a></td><td colspan=3></td><td>Antarctica/Davis Asia/Bangkok Asia/Jakarta Asia/Phnom_Penh Asia/Saigon Asia/Vientiane Etc/GMT-7 Indian/Christmas VST</td></tr>
<tr valign=top><td><a href="#GMTp700">GMT+7:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Sep lastSun 0:00</td><td>1:00</td><td>Asia/Hovd</td></tr>
<tr valign=top><td><a href="#GMTp700">GMT+7:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Krasnoyarsk</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td>Antarctica/Casey Asia/Brunei Asia/Dili Asia/Kuala_Lumpur Asia/Kuching Asia/Singapore Asia/Ujung_Pandang Australia/Perth Etc/GMT-8</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td colspan=3></td><td>Antarctica/Casey Asia/Brunei Asia/Kuala_Lumpur Asia/Kuching Asia/Singapore Asia/Ujung_Pandang Australia/Perth Etc/GMT-8</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Apr Sun>=10 0:00</td><td nowrap>Sep Sun>=11 0:00</td><td>1:00</td><td>Asia/Chungking Asia/Harbin Asia/Kashgar Asia/Macao Asia/Shanghai Asia/Urumqi CTT</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Jun 30 0:00</td><td nowrap>Sep 30 0:00</td><td>1:00</td><td>Asia/Taipei</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Mar 22 0:00</td><td nowrap>Sep 21 0:00</td><td>1:00</td><td>Asia/Manila</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Mar lastSun 0:00</td><td nowrap>Sep lastSun 0:00</td><td>1:00</td><td>Asia/Ulaanbaatar</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Irkutsk</td></tr>
<tr valign=top><td><a href="#GMTp800">GMT+8:00</a></td><td nowrap>May Sun>=8 3:30</td><td nowrap>Oct Sun>=16 3:30</td><td>1:00</td><td>Asia/Hong_Kong</td></tr>
<tr valign=top><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td>Asia/Jayapura Asia/Pyongyang Asia/Tokyo Etc/GMT-9 JST Pacific/Palau</td></tr>
<tr valign=top><td><a href="#GMTp900">GMT+9:00</a></td><td colspan=3></td><td>Asia/Dili Asia/Jayapura Asia/Pyongyang Asia/Tokyo Etc/GMT-9 JST Pacific/Palau</td></tr>
<tr valign=top><td><a href="#GMTp900">GMT+9:00</a></td><td nowrap>Mar lastSun 2:00s</td><td nowrap>Oct lastSun 2:00s</td><td>1:00</td><td>Asia/Yakutsk</td></tr>
<tr valign=top><td><a href="#GMTp900">GMT+9:00</a></td><td nowrap>May Sun<=14 0:00</td><td nowrap>Oct Sun<=14 0:00</td><td>1:00</td><td>Asia/Seoul</td></tr>
<tr valign=top><td><a href="#GMTp930">GMT+9:30</a></td><td nowrap>Oct 3 2:00</td><td nowrap>Mar lastSun 2:00</td><td>1:00</td><td>ACT Australia/Darwin</td></tr>
@ -726,9 +739,260 @@ a given zone is negligible.</p>
<tr valign=top><td><a href="#GMTp1200">GMT+12:00</a></td><td nowrap>Oct Sun>=1 2:00s</td><td nowrap>Mar Sun>=15 2:00s</td><td>1:00</td><td>Antarctica/McMurdo NST Pacific/Auckland</td></tr>
<tr valign=top><td><a href="#GMTp1245">GMT+12:45</a></td><td nowrap>Oct Sun>=1 2:45s</td><td nowrap>Mar Sun>=15 2:45s</td><td>1:00</td><td>Pacific/Chatham</td></tr>
<tr valign=top><td><a href="#GMTp1300">GMT+13:00</a></td><td colspan=3></td><td>Etc/GMT-13 Pacific/Enderbury</td></tr>
<tr valign=top><td><a href="#GMTp1300">GMT+13:00</a></td><td nowrap>Oct Sat>=1 2:00s</td><td nowrap>Apr Sun>=16 2:00s</td><td>1:00</td><td>Pacific/Tongatapu</td></tr>
<tr valign=top><td><a href="#GMTp1300">GMT+13:00</a></td><td nowrap>Nov 4 2:00s</td><td nowrap>Jan 27 2:00s</td><td>1:00</td><td>Pacific/Tongatapu</td></tr>
<tr valign=top><td><a href="#GMTp1400">GMT+14:00</a></td><td colspan=3></td><td>Etc/GMT-14 Pacific/Kiritimati</td></tr>
</table>
<hr>
<h2>Time Zones by Country</h2>
<p>ICU captures and exports the country data from the Olson database.
The country code is the ISO 3166 two-letter code. Some zones have no
associated country; these are listed under the entry "(None)".
<p><table>
<tr><td>Country</td><td>Zones</td></tr>
<tr><td><hr></td><td><hr></td></tr>
<tr valign=top><td nowrap>(None)</td><td><a href="#AsiaRiyadh87">Asia/Riyadh87</a>, <a href="#AsiaRiyadh88">Asia/Riyadh88</a>, <a href="#AsiaRiyadh89">Asia/Riyadh89</a>, <a href="#CET">CET</a>, <a href="#EET">EET</a>, <a href="#EtcGMT">Etc/GMT</a>, <a href="#EtcGMTp1">Etc/GMT+1</a>, <a href="#EtcGMTp10">Etc/GMT+10</a>, <a href="#EtcGMTp11">Etc/GMT+11</a>, <a href="#EtcGMTp12">Etc/GMT+12</a>, <a href="#EtcGMTp2">Etc/GMT+2</a>, <a href="#EtcGMTp3">Etc/GMT+3</a>, <a href="#EtcGMTp4">Etc/GMT+4</a>, <a href="#EtcGMTp5">Etc/GMT+5</a>, <a href="#EtcGMTp6">Etc/GMT+6</a>, <a href="#EtcGMTp7">Etc/GMT+7</a>, <a href="#EtcGMTp8">Etc/GMT+8</a>, <a href="#EtcGMTp9">Etc/GMT+9</a>, <a href="#EtcGMTm1">Etc/GMT-1</a>, <a href="#EtcGMTm10">Etc/GMT-10</a>, <a href="#EtcGMTm11">Etc/GMT-11</a>, <a href="#EtcGMTm12">Etc/GMT-12</a>, <a href="#EtcGMTm13">Etc/GMT-13</a>, <a href="#EtcGMTm14">Etc/GMT-14</a>, <a href="#EtcGMTm2">Etc/GMT-2</a>, <a href="#EtcGMTm3">Etc/GMT-3</a>, <a href="#EtcGMTm4">Etc/GMT-4</a>, <a href="#EtcGMTm5">Etc/GMT-5</a>, <a href="#EtcGMTm6">Etc/GMT-6</a>, <a href="#EtcGMTm7">Etc/GMT-7</a>, <a href="#EtcGMTm8">Etc/GMT-8</a>, <a href="#EtcGMTm9">Etc/GMT-9</a>, <a href="#EtcUCT">Etc/UCT</a>, <a href="#EtcUTC">Etc/UTC</a>, <a href="#GMT">GMT</a>, <a href="#MET">MET</a>, <a href="#UTC">UTC</a>, <a href="#WET">WET</a></td></tr>
<tr valign=top><td nowrap>AD (Andorra)</td><td><a href="#EuropeAndorra">Europe/Andorra</a></td></tr>
<tr valign=top><td nowrap>AE (United Arab Emirates)</td><td><a href="#AsiaDubai">Asia/Dubai</a></td></tr>
<tr valign=top><td nowrap>AF (Afghanistan)</td><td><a href="#AsiaKabul">Asia/Kabul</a></td></tr>
<tr valign=top><td nowrap>AG (Antigua & Barbuda)</td><td><a href="#AmericaAntigua">America/Antigua</a></td></tr>
<tr valign=top><td nowrap>AI (Anguilla)</td><td><a href="#AmericaAnguilla">America/Anguilla</a></td></tr>
<tr valign=top><td nowrap>AL (Albania)</td><td><a href="#EuropeTirane">Europe/Tirane</a></td></tr>
<tr valign=top><td nowrap>AM (Armenia)</td><td><a href="#AsiaYerevan">Asia/Yerevan</a>, <a href="#NET">NET</a></td></tr>
<tr valign=top><td nowrap>AN (Netherlands Antilles)</td><td><a href="#AmericaCuracao">America/Curacao</a></td></tr>
<tr valign=top><td nowrap>AO (Angola)</td><td><a href="#AfricaLuanda">Africa/Luanda</a></td></tr>
<tr valign=top><td nowrap>AQ (Antarctica)</td><td><a href="#AntarcticaCasey">Antarctica/Casey</a>, <a href="#AntarcticaDavis">Antarctica/Davis</a>, <a href="#AntarcticaDumontDUrville">Antarctica/DumontDUrville</a>, <a href="#AntarcticaMawson">Antarctica/Mawson</a>, <a href="#AntarcticaMcMurdo">Antarctica/McMurdo</a>, <a href="#AntarcticaPalmer">Antarctica/Palmer</a>, <a href="#AntarcticaSyowa">Antarctica/Syowa</a></td></tr>
<tr valign=top><td nowrap>AR (Argentina)</td><td><a href="#AGT">AGT</a>, <a href="#AmericaBuenos_Aires">America/Buenos_Aires</a>, <a href="#AmericaCatamarca">America/Catamarca</a>, <a href="#AmericaCordoba">America/Cordoba</a>, <a href="#AmericaJujuy">America/Jujuy</a>, <a href="#AmericaMendoza">America/Mendoza</a>, <a href="#AmericaRosario">America/Rosario</a></td></tr>
<tr valign=top><td nowrap>AS (Samoa (American))</td><td><a href="#PacificPago_Pago">Pacific/Pago_Pago</a></td></tr>
<tr valign=top><td nowrap>AT (Austria)</td><td><a href="#EuropeVienna">Europe/Vienna</a></td></tr>
<tr valign=top><td nowrap>AU (Australia)</td><td><a href="#ACT">ACT</a>, <a href="#AET">AET</a>, <a href="#AustraliaAdelaide">Australia/Adelaide</a>, <a href="#AustraliaBrisbane">Australia/Brisbane</a>, <a href="#AustraliaBroken_Hill">Australia/Broken_Hill</a>, <a href="#AustraliaDarwin">Australia/Darwin</a>, <a href="#AustraliaHobart">Australia/Hobart</a>, <a href="#AustraliaLindeman">Australia/Lindeman</a>, <a href="#AustraliaLord_Howe">Australia/Lord_Howe</a>, <a href="#AustraliaMelbourne">Australia/Melbourne</a>, <a href="#AustraliaPerth">Australia/Perth</a>, <a href="#AustraliaSydney">Australia/Sydney</a></td></tr>
<tr valign=top><td nowrap>AW (Aruba)</td><td><a href="#AmericaAruba">America/Aruba</a></td></tr>
<tr valign=top><td nowrap>AZ (Azerbaijan)</td><td><a href="#AsiaBaku">Asia/Baku</a></td></tr>
<tr valign=top><td nowrap>BA (Bosnia & Herzegovina)</td><td><a href="#EuropeSarajevo">Europe/Sarajevo</a></td></tr>
<tr valign=top><td nowrap>BB (Barbados)</td><td><a href="#AmericaBarbados">America/Barbados</a></td></tr>
<tr valign=top><td nowrap>BD (Bangladesh)</td><td><a href="#AsiaDhaka">Asia/Dhaka</a>, <a href="#BST">BST</a></td></tr>
<tr valign=top><td nowrap>BE (Belgium)</td><td><a href="#EuropeBrussels">Europe/Brussels</a></td></tr>
<tr valign=top><td nowrap>BF (Burkina Faso)</td><td><a href="#AfricaOuagadougou">Africa/Ouagadougou</a></td></tr>
<tr valign=top><td nowrap>BG (Bulgaria)</td><td><a href="#EuropeSofia">Europe/Sofia</a></td></tr>
<tr valign=top><td nowrap>BH (Bahrain)</td><td><a href="#AsiaBahrain">Asia/Bahrain</a></td></tr>
<tr valign=top><td nowrap>BI (Burundi)</td><td><a href="#AfricaBujumbura">Africa/Bujumbura</a></td></tr>
<tr valign=top><td nowrap>BJ (Benin)</td><td><a href="#AfricaPortomNovo">Africa/Porto-Novo</a></td></tr>
<tr valign=top><td nowrap>BM (Bermuda)</td><td><a href="#AtlanticBermuda">Atlantic/Bermuda</a></td></tr>
<tr valign=top><td nowrap>BN (Brunei)</td><td><a href="#AsiaBrunei">Asia/Brunei</a></td></tr>
<tr valign=top><td nowrap>BO (Bolivia)</td><td><a href="#AmericaLa_Paz">America/La_Paz</a></td></tr>
<tr valign=top><td nowrap>BR (Brazil)</td><td><a href="#AmericaAraguaina">America/Araguaina</a>, <a href="#AmericaBelem">America/Belem</a>, <a href="#AmericaBoa_Vista">America/Boa_Vista</a>, <a href="#AmericaCuiaba">America/Cuiaba</a>, <a href="#AmericaEirunepe">America/Eirunepe</a>, <a href="#AmericaFortaleza">America/Fortaleza</a>, <a href="#AmericaMaceio">America/Maceio</a>, <a href="#AmericaManaus">America/Manaus</a>, <a href="#AmericaNoronha">America/Noronha</a>, <a href="#AmericaPorto_Acre">America/Porto_Acre</a>, <a href="#AmericaPorto_Velho">America/Porto_Velho</a>, <a href="#AmericaRecife">America/Recife</a>, <a href="#AmericaSao_Paulo">America/Sao_Paulo</a>, <a href="#BET">BET</a></td></tr>
<tr valign=top><td nowrap>BS (Bahamas)</td><td><a href="#AmericaNassau">America/Nassau</a></td></tr>
<tr valign=top><td nowrap>BT (Bhutan)</td><td><a href="#AsiaThimphu">Asia/Thimphu</a></td></tr>
<tr valign=top><td nowrap>BW (Botswana)</td><td><a href="#AfricaGaborone">Africa/Gaborone</a></td></tr>
<tr valign=top><td nowrap>BY (Belarus)</td><td><a href="#EuropeMinsk">Europe/Minsk</a></td></tr>
<tr valign=top><td nowrap>BZ (Belize)</td><td><a href="#AmericaBelize">America/Belize</a></td></tr>
<tr valign=top><td nowrap>CA (Canada)</td><td><a href="#AmericaCambridge_Bay">America/Cambridge_Bay</a>, <a href="#AmericaDawson">America/Dawson</a>, <a href="#AmericaDawson_Creek">America/Dawson_Creek</a>, <a href="#AmericaEdmonton">America/Edmonton</a>, <a href="#AmericaGlace_Bay">America/Glace_Bay</a>, <a href="#AmericaGoose_Bay">America/Goose_Bay</a>, <a href="#AmericaHalifax">America/Halifax</a>, <a href="#AmericaInuvik">America/Inuvik</a>, <a href="#AmericaIqaluit">America/Iqaluit</a>, <a href="#AmericaMontreal">America/Montreal</a>, <a href="#AmericaNipigon">America/Nipigon</a>, <a href="#AmericaPangnirtung">America/Pangnirtung</a>, <a href="#AmericaRainy_River">America/Rainy_River</a>, <a href="#AmericaRankin_Inlet">America/Rankin_Inlet</a>, <a href="#AmericaRegina">America/Regina</a>, <a href="#AmericaSt_Johns">America/St_Johns</a>, <a href="#AmericaSwift_Current">America/Swift_Current</a>, <a href="#AmericaThunder_Bay">America/Thunder_Bay</a>, <a href="#AmericaVancouver">America/Vancouver</a>, <a href="#AmericaWhitehorse">America/Whitehorse</a>, <a href="#AmericaWinnipeg">America/Winnipeg</a>, <a href="#AmericaYellowknife">America/Yellowknife</a>, <a href="#CNT">CNT</a></td></tr>
<tr valign=top><td nowrap>CC (Cocos (Keeling) Islands)</td><td><a href="#IndianCocos">Indian/Cocos</a></td></tr>
<tr valign=top><td nowrap>CD (Congo (Dem. Rep.))</td><td><a href="#AfricaKinshasa">Africa/Kinshasa</a>, <a href="#AfricaLubumbashi">Africa/Lubumbashi</a></td></tr>
<tr valign=top><td nowrap>CF (Central African Rep.)</td><td><a href="#AfricaBangui">Africa/Bangui</a></td></tr>
<tr valign=top><td nowrap>CG (Congo (Rep.))</td><td><a href="#AfricaBrazzaville">Africa/Brazzaville</a></td></tr>
<tr valign=top><td nowrap>CH (Switzerland)</td><td><a href="#EuropeZurich">Europe/Zurich</a></td></tr>
<tr valign=top><td nowrap>CI (Cote d'Ivoire)</td><td><a href="#AfricaAbidjan">Africa/Abidjan</a></td></tr>
<tr valign=top><td nowrap>CK (Cook Islands)</td><td><a href="#PacificRarotonga">Pacific/Rarotonga</a></td></tr>
<tr valign=top><td nowrap>CL (Chile)</td><td><a href="#AmericaSantiago">America/Santiago</a>, <a href="#PacificEaster">Pacific/Easter</a></td></tr>
<tr valign=top><td nowrap>CM (Cameroon)</td><td><a href="#AfricaDouala">Africa/Douala</a></td></tr>
<tr valign=top><td nowrap>CN (China)</td><td><a href="#AsiaChungking">Asia/Chungking</a>, <a href="#AsiaHarbin">Asia/Harbin</a>, <a href="#AsiaKashgar">Asia/Kashgar</a>, <a href="#AsiaShanghai">Asia/Shanghai</a>, <a href="#AsiaUrumqi">Asia/Urumqi</a>, <a href="#CTT">CTT</a></td></tr>
<tr valign=top><td nowrap>CO (Colombia)</td><td><a href="#AmericaBogota">America/Bogota</a></td></tr>
<tr valign=top><td nowrap>CR (Costa Rica)</td><td><a href="#AmericaCosta_Rica">America/Costa_Rica</a></td></tr>
<tr valign=top><td nowrap>CU (Cuba)</td><td><a href="#AmericaHavana">America/Havana</a></td></tr>
<tr valign=top><td nowrap>CV (Cape Verde)</td><td><a href="#AtlanticCape_Verde">Atlantic/Cape_Verde</a></td></tr>
<tr valign=top><td nowrap>CX (Christmas Island)</td><td><a href="#IndianChristmas">Indian/Christmas</a></td></tr>
<tr valign=top><td nowrap>CY (Cyprus)</td><td><a href="#AsiaNicosia">Asia/Nicosia</a></td></tr>
<tr valign=top><td nowrap>CZ (Czech Republic)</td><td><a href="#EuropePrague">Europe/Prague</a></td></tr>
<tr valign=top><td nowrap>DE (Germany)</td><td><a href="#EuropeBerlin">Europe/Berlin</a></td></tr>
<tr valign=top><td nowrap>DJ (Djibouti)</td><td><a href="#AfricaDjibouti">Africa/Djibouti</a></td></tr>
<tr valign=top><td nowrap>DK (Denmark)</td><td><a href="#EuropeCopenhagen">Europe/Copenhagen</a></td></tr>
<tr valign=top><td nowrap>DM (Dominica)</td><td><a href="#AmericaDominica">America/Dominica</a></td></tr>
<tr valign=top><td nowrap>DO (Dominican Republic)</td><td><a href="#AmericaSanto_Domingo">America/Santo_Domingo</a></td></tr>
<tr valign=top><td nowrap>DZ (Algeria)</td><td><a href="#AfricaAlgiers">Africa/Algiers</a></td></tr>
<tr valign=top><td nowrap>EC (Ecuador)</td><td><a href="#AmericaGuayaquil">America/Guayaquil</a>, <a href="#PacificGalapagos">Pacific/Galapagos</a></td></tr>
<tr valign=top><td nowrap>EE (Estonia)</td><td><a href="#EuropeTallinn">Europe/Tallinn</a></td></tr>
<tr valign=top><td nowrap>EG (Egypt)</td><td><a href="#ART">ART</a>, <a href="#AfricaCairo">Africa/Cairo</a></td></tr>
<tr valign=top><td nowrap>EH (Western Sahara)</td><td><a href="#AfricaEl_Aaiun">Africa/El_Aaiun</a></td></tr>
<tr valign=top><td nowrap>ER (Eritrea)</td><td><a href="#AfricaAsmera">Africa/Asmera</a></td></tr>
<tr valign=top><td nowrap>ES (Spain)</td><td><a href="#AfricaCeuta">Africa/Ceuta</a>, <a href="#AtlanticCanary">Atlantic/Canary</a>, <a href="#EuropeMadrid">Europe/Madrid</a></td></tr>
<tr valign=top><td nowrap>ET (Ethiopia)</td><td><a href="#AfricaAddis_Ababa">Africa/Addis_Ababa</a>, <a href="#EAT">EAT</a></td></tr>
<tr valign=top><td nowrap>FI (Finland)</td><td><a href="#EuropeHelsinki">Europe/Helsinki</a></td></tr>
<tr valign=top><td nowrap>FJ (Fiji)</td><td><a href="#PacificFiji">Pacific/Fiji</a></td></tr>
<tr valign=top><td nowrap>FK (Falkland Islands)</td><td><a href="#AtlanticStanley">Atlantic/Stanley</a></td></tr>
<tr valign=top><td nowrap>FM (Micronesia)</td><td><a href="#PacificKosrae">Pacific/Kosrae</a>, <a href="#PacificPonape">Pacific/Ponape</a>, <a href="#PacificTruk">Pacific/Truk</a>, <a href="#PacificYap">Pacific/Yap</a></td></tr>
<tr valign=top><td nowrap>FO (Faeroe Islands)</td><td><a href="#AtlanticFaeroe">Atlantic/Faeroe</a></td></tr>
<tr valign=top><td nowrap>FR (France)</td><td><a href="#ECT">ECT</a>, <a href="#EuropeParis">Europe/Paris</a></td></tr>
<tr valign=top><td nowrap>GA (Gabon)</td><td><a href="#AfricaLibreville">Africa/Libreville</a></td></tr>
<tr valign=top><td nowrap>GB (Britain (UK))</td><td><a href="#EuropeBelfast">Europe/Belfast</a>, <a href="#EuropeLondon">Europe/London</a></td></tr>
<tr valign=top><td nowrap>GD (Grenada)</td><td><a href="#AmericaGrenada">America/Grenada</a></td></tr>
<tr valign=top><td nowrap>GE (Georgia)</td><td><a href="#AsiaTbilisi">Asia/Tbilisi</a></td></tr>
<tr valign=top><td nowrap>GF (French Guiana)</td><td><a href="#AmericaCayenne">America/Cayenne</a></td></tr>
<tr valign=top><td nowrap>GH (Ghana)</td><td><a href="#AfricaAccra">Africa/Accra</a></td></tr>
<tr valign=top><td nowrap>GI (Gibraltar)</td><td><a href="#EuropeGibraltar">Europe/Gibraltar</a></td></tr>
<tr valign=top><td nowrap>GL (Greenland)</td><td><a href="#AmericaGodthab">America/Godthab</a>, <a href="#AmericaScoresbysund">America/Scoresbysund</a>, <a href="#AmericaThule">America/Thule</a></td></tr>
<tr valign=top><td nowrap>GM (Gambia)</td><td><a href="#AfricaBanjul">Africa/Banjul</a></td></tr>
<tr valign=top><td nowrap>GN (Guinea)</td><td><a href="#AfricaConakry">Africa/Conakry</a></td></tr>
<tr valign=top><td nowrap>GP (Guadeloupe)</td><td><a href="#AmericaGuadeloupe">America/Guadeloupe</a></td></tr>
<tr valign=top><td nowrap>GQ (Equatorial Guinea)</td><td><a href="#AfricaMalabo">Africa/Malabo</a></td></tr>
<tr valign=top><td nowrap>GR (Greece)</td><td><a href="#EuropeAthens">Europe/Athens</a></td></tr>
<tr valign=top><td nowrap>GS (South Georgia & the South Sandwich Islands)</td><td><a href="#AtlanticSouth_Georgia">Atlantic/South_Georgia</a></td></tr>
<tr valign=top><td nowrap>GT (Guatemala)</td><td><a href="#AmericaGuatemala">America/Guatemala</a></td></tr>
<tr valign=top><td nowrap>GU (Guam)</td><td><a href="#PacificGuam">Pacific/Guam</a></td></tr>
<tr valign=top><td nowrap>GW (Guinea-Bissau)</td><td><a href="#AfricaBissau">Africa/Bissau</a></td></tr>
<tr valign=top><td nowrap>GY (Guyana)</td><td><a href="#AmericaGuyana">America/Guyana</a></td></tr>
<tr valign=top><td nowrap>HK (Hong Kong)</td><td><a href="#AsiaHong_Kong">Asia/Hong_Kong</a></td></tr>
<tr valign=top><td nowrap>HN (Honduras)</td><td><a href="#AmericaTegucigalpa">America/Tegucigalpa</a></td></tr>
<tr valign=top><td nowrap>HR (Croatia)</td><td><a href="#EuropeZagreb">Europe/Zagreb</a></td></tr>
<tr valign=top><td nowrap>HT (Haiti)</td><td><a href="#AmericaPortmaumPrince">America/Port-au-Prince</a></td></tr>
<tr valign=top><td nowrap>HU (Hungary)</td><td><a href="#EuropeBudapest">Europe/Budapest</a></td></tr>
<tr valign=top><td nowrap>ID (Indonesia)</td><td><a href="#AsiaJakarta">Asia/Jakarta</a>, <a href="#AsiaJayapura">Asia/Jayapura</a>, <a href="#AsiaUjung_Pandang">Asia/Ujung_Pandang</a></td></tr>
<tr valign=top><td nowrap>IE (Ireland)</td><td><a href="#EuropeDublin">Europe/Dublin</a></td></tr>
<tr valign=top><td nowrap>IL (Israel)</td><td><a href="#AsiaJerusalem">Asia/Jerusalem</a></td></tr>
<tr valign=top><td nowrap>IN (India)</td><td><a href="#AsiaCalcutta">Asia/Calcutta</a>, <a href="#IST">IST</a></td></tr>
<tr valign=top><td nowrap>IO (British Indian Ocean Territory)</td><td><a href="#IndianChagos">Indian/Chagos</a></td></tr>
<tr valign=top><td nowrap>IQ (Iraq)</td><td><a href="#AsiaBaghdad">Asia/Baghdad</a></td></tr>
<tr valign=top><td nowrap>IR (Iran)</td><td><a href="#AsiaTehran">Asia/Tehran</a></td></tr>
<tr valign=top><td nowrap>IS (Iceland)</td><td><a href="#AtlanticReykjavik">Atlantic/Reykjavik</a></td></tr>
<tr valign=top><td nowrap>IT (Italy)</td><td><a href="#EuropeRome">Europe/Rome</a></td></tr>
<tr valign=top><td nowrap>JM (Jamaica)</td><td><a href="#AmericaJamaica">America/Jamaica</a></td></tr>
<tr valign=top><td nowrap>JO (Jordan)</td><td><a href="#AsiaAmman">Asia/Amman</a></td></tr>
<tr valign=top><td nowrap>JP (Japan)</td><td><a href="#AsiaTokyo">Asia/Tokyo</a>, <a href="#JST">JST</a></td></tr>
<tr valign=top><td nowrap>KE (Kenya)</td><td><a href="#AfricaNairobi">Africa/Nairobi</a></td></tr>
<tr valign=top><td nowrap>KG (Kyrgyzstan)</td><td><a href="#AsiaBishkek">Asia/Bishkek</a></td></tr>
<tr valign=top><td nowrap>KH (Cambodia)</td><td><a href="#AsiaPhnom_Penh">Asia/Phnom_Penh</a></td></tr>
<tr valign=top><td nowrap>KI (Kiribati)</td><td><a href="#PacificEnderbury">Pacific/Enderbury</a>, <a href="#PacificKiritimati">Pacific/Kiritimati</a>, <a href="#PacificTarawa">Pacific/Tarawa</a></td></tr>
<tr valign=top><td nowrap>KM (Comoros)</td><td><a href="#IndianComoro">Indian/Comoro</a></td></tr>
<tr valign=top><td nowrap>KN (St Kitts & Nevis)</td><td><a href="#AmericaSt_Kitts">America/St_Kitts</a></td></tr>
<tr valign=top><td nowrap>KP (Korea (North))</td><td><a href="#AsiaPyongyang">Asia/Pyongyang</a></td></tr>
<tr valign=top><td nowrap>KR (Korea (South))</td><td><a href="#AsiaSeoul">Asia/Seoul</a></td></tr>
<tr valign=top><td nowrap>KW (Kuwait)</td><td><a href="#AsiaKuwait">Asia/Kuwait</a></td></tr>
<tr valign=top><td nowrap>KY (Cayman Islands)</td><td><a href="#AmericaCayman">America/Cayman</a></td></tr>
<tr valign=top><td nowrap>KZ (Kazakhstan)</td><td><a href="#AsiaAlmaty">Asia/Almaty</a>, <a href="#AsiaAqtau">Asia/Aqtau</a>, <a href="#AsiaAqtobe">Asia/Aqtobe</a></td></tr>
<tr valign=top><td nowrap>LA (Laos)</td><td><a href="#AsiaVientiane">Asia/Vientiane</a></td></tr>
<tr valign=top><td nowrap>LB (Lebanon)</td><td><a href="#AsiaBeirut">Asia/Beirut</a></td></tr>
<tr valign=top><td nowrap>LC (St Lucia)</td><td><a href="#AmericaSt_Lucia">America/St_Lucia</a></td></tr>
<tr valign=top><td nowrap>LI (Liechtenstein)</td><td><a href="#EuropeVaduz">Europe/Vaduz</a></td></tr>
<tr valign=top><td nowrap>LK (Sri Lanka)</td><td><a href="#AsiaColombo">Asia/Colombo</a></td></tr>
<tr valign=top><td nowrap>LR (Liberia)</td><td><a href="#AfricaMonrovia">Africa/Monrovia</a></td></tr>
<tr valign=top><td nowrap>LS (Lesotho)</td><td><a href="#AfricaMaseru">Africa/Maseru</a></td></tr>
<tr valign=top><td nowrap>LT (Lithuania)</td><td><a href="#EuropeVilnius">Europe/Vilnius</a></td></tr>
<tr valign=top><td nowrap>LU (Luxembourg)</td><td><a href="#EuropeLuxembourg">Europe/Luxembourg</a></td></tr>
<tr valign=top><td nowrap>LV (Latvia)</td><td><a href="#EuropeRiga">Europe/Riga</a></td></tr>
<tr valign=top><td nowrap>LY (Libya)</td><td><a href="#AfricaTripoli">Africa/Tripoli</a></td></tr>
<tr valign=top><td nowrap>MA (Morocco)</td><td><a href="#AfricaCasablanca">Africa/Casablanca</a></td></tr>
<tr valign=top><td nowrap>MC (Monaco)</td><td><a href="#EuropeMonaco">Europe/Monaco</a></td></tr>
<tr valign=top><td nowrap>MD (Moldova)</td><td><a href="#EuropeChisinau">Europe/Chisinau</a>, <a href="#EuropeTiraspol">Europe/Tiraspol</a></td></tr>
<tr valign=top><td nowrap>MG (Madagascar)</td><td><a href="#IndianAntananarivo">Indian/Antananarivo</a></td></tr>
<tr valign=top><td nowrap>MH (Marshall Islands)</td><td><a href="#PacificKwajalein">Pacific/Kwajalein</a>, <a href="#PacificMajuro">Pacific/Majuro</a></td></tr>
<tr valign=top><td nowrap>MK (Macedonia)</td><td><a href="#EuropeSkopje">Europe/Skopje</a></td></tr>
<tr valign=top><td nowrap>ML (Mali)</td><td><a href="#AfricaBamako">Africa/Bamako</a>, <a href="#AfricaTimbuktu">Africa/Timbuktu</a></td></tr>
<tr valign=top><td nowrap>MM (Myanmar (Burma))</td><td><a href="#AsiaRangoon">Asia/Rangoon</a></td></tr>
<tr valign=top><td nowrap>MN (Mongolia)</td><td><a href="#AsiaHovd">Asia/Hovd</a>, <a href="#AsiaUlaanbaatar">Asia/Ulaanbaatar</a></td></tr>
<tr valign=top><td nowrap>MO (Macao)</td><td><a href="#AsiaMacao">Asia/Macao</a></td></tr>
<tr valign=top><td nowrap>MP (Northern Mariana Islands)</td><td><a href="#PacificSaipan">Pacific/Saipan</a></td></tr>
<tr valign=top><td nowrap>MQ (Martinique)</td><td><a href="#AmericaMartinique">America/Martinique</a></td></tr>
<tr valign=top><td nowrap>MR (Mauritania)</td><td><a href="#AfricaNouakchott">Africa/Nouakchott</a></td></tr>
<tr valign=top><td nowrap>MS (Montserrat)</td><td><a href="#AmericaMontserrat">America/Montserrat</a></td></tr>
<tr valign=top><td nowrap>MT (Malta)</td><td><a href="#EuropeMalta">Europe/Malta</a></td></tr>
<tr valign=top><td nowrap>MU (Mauritius)</td><td><a href="#IndianMauritius">Indian/Mauritius</a></td></tr>
<tr valign=top><td nowrap>MV (Maldives)</td><td><a href="#IndianMaldives">Indian/Maldives</a></td></tr>
<tr valign=top><td nowrap>MW (Malawi)</td><td><a href="#AfricaBlantyre">Africa/Blantyre</a></td></tr>
<tr valign=top><td nowrap>MX (Mexico)</td><td><a href="#AmericaCancun">America/Cancun</a>, <a href="#AmericaChihuahua">America/Chihuahua</a>, <a href="#AmericaHermosillo">America/Hermosillo</a>, <a href="#AmericaMazatlan">America/Mazatlan</a>, <a href="#AmericaMerida">America/Merida</a>, <a href="#AmericaMexico_City">America/Mexico_City</a>, <a href="#AmericaMonterrey">America/Monterrey</a>, <a href="#AmericaTijuana">America/Tijuana</a></td></tr>
<tr valign=top><td nowrap>MY (Malaysia)</td><td><a href="#AsiaKuala_Lumpur">Asia/Kuala_Lumpur</a>, <a href="#AsiaKuching">Asia/Kuching</a></td></tr>
<tr valign=top><td nowrap>MZ (Mozambique)</td><td><a href="#AfricaMaputo">Africa/Maputo</a></td></tr>
<tr valign=top><td nowrap>NA (Namibia)</td><td><a href="#AfricaWindhoek">Africa/Windhoek</a></td></tr>
<tr valign=top><td nowrap>NC (New Caledonia)</td><td><a href="#PacificNoumea">Pacific/Noumea</a></td></tr>
<tr valign=top><td nowrap>NE (Niger)</td><td><a href="#AfricaNiamey">Africa/Niamey</a></td></tr>
<tr valign=top><td nowrap>NF (Norfolk Island)</td><td><a href="#PacificNorfolk">Pacific/Norfolk</a></td></tr>
<tr valign=top><td nowrap>NG (Nigeria)</td><td><a href="#AfricaLagos">Africa/Lagos</a></td></tr>
<tr valign=top><td nowrap>NI (Nicaragua)</td><td><a href="#AmericaManagua">America/Managua</a></td></tr>
<tr valign=top><td nowrap>NL (Netherlands)</td><td><a href="#EuropeAmsterdam">Europe/Amsterdam</a></td></tr>
<tr valign=top><td nowrap>NO (Norway)</td><td><a href="#EuropeOslo">Europe/Oslo</a></td></tr>
<tr valign=top><td nowrap>NP (Nepal)</td><td><a href="#AsiaKatmandu">Asia/Katmandu</a></td></tr>
<tr valign=top><td nowrap>NR (Nauru)</td><td><a href="#PacificNauru">Pacific/Nauru</a></td></tr>
<tr valign=top><td nowrap>NU (Niue)</td><td><a href="#PacificNiue">Pacific/Niue</a></td></tr>
<tr valign=top><td nowrap>NZ (New Zealand)</td><td><a href="#NST">NST</a>, <a href="#PacificAuckland">Pacific/Auckland</a>, <a href="#PacificChatham">Pacific/Chatham</a></td></tr>
<tr valign=top><td nowrap>OM (Oman)</td><td><a href="#AsiaMuscat">Asia/Muscat</a></td></tr>
<tr valign=top><td nowrap>PA (Panama)</td><td><a href="#AmericaPanama">America/Panama</a></td></tr>
<tr valign=top><td nowrap>PE (Peru)</td><td><a href="#AmericaLima">America/Lima</a></td></tr>
<tr valign=top><td nowrap>PF (French Polynesia)</td><td><a href="#PacificGambier">Pacific/Gambier</a>, <a href="#PacificMarquesas">Pacific/Marquesas</a>, <a href="#PacificTahiti">Pacific/Tahiti</a></td></tr>
<tr valign=top><td nowrap>PG (Papua New Guinea)</td><td><a href="#PacificPort_Moresby">Pacific/Port_Moresby</a></td></tr>
<tr valign=top><td nowrap>PH (Philippines)</td><td><a href="#AsiaManila">Asia/Manila</a></td></tr>
<tr valign=top><td nowrap>PK (Pakistan)</td><td><a href="#AsiaKarachi">Asia/Karachi</a>, <a href="#PLT">PLT</a></td></tr>
<tr valign=top><td nowrap>PL (Poland)</td><td><a href="#EuropeWarsaw">Europe/Warsaw</a></td></tr>
<tr valign=top><td nowrap>PM (St Pierre & Miquelon)</td><td><a href="#AmericaMiquelon">America/Miquelon</a></td></tr>
<tr valign=top><td nowrap>PN (Pitcairn)</td><td><a href="#PacificPitcairn">Pacific/Pitcairn</a></td></tr>
<tr valign=top><td nowrap>PR (Puerto Rico)</td><td><a href="#AmericaPuerto_Rico">America/Puerto_Rico</a>, <a href="#PRT">PRT</a></td></tr>
<tr valign=top><td nowrap>PS (Palestine)</td><td><a href="#AsiaGaza">Asia/Gaza</a></td></tr>
<tr valign=top><td nowrap>PT (Portugal)</td><td><a href="#AtlanticAzores">Atlantic/Azores</a>, <a href="#AtlanticMadeira">Atlantic/Madeira</a>, <a href="#EuropeLisbon">Europe/Lisbon</a></td></tr>
<tr valign=top><td nowrap>PW (Palau)</td><td><a href="#PacificPalau">Pacific/Palau</a></td></tr>
<tr valign=top><td nowrap>PY (Paraguay)</td><td><a href="#AmericaAsuncion">America/Asuncion</a></td></tr>
<tr valign=top><td nowrap>QA (Qatar)</td><td><a href="#AsiaQatar">Asia/Qatar</a></td></tr>
<tr valign=top><td nowrap>RE (Reunion)</td><td><a href="#IndianReunion">Indian/Reunion</a></td></tr>
<tr valign=top><td nowrap>RO (Romania)</td><td><a href="#EuropeBucharest">Europe/Bucharest</a></td></tr>
<tr valign=top><td nowrap>RU (Russia)</td><td><a href="#AsiaAnadyr">Asia/Anadyr</a>, <a href="#AsiaIrkutsk">Asia/Irkutsk</a>, <a href="#AsiaKamchatka">Asia/Kamchatka</a>, <a href="#AsiaKrasnoyarsk">Asia/Krasnoyarsk</a>, <a href="#AsiaMagadan">Asia/Magadan</a>, <a href="#AsiaNovosibirsk">Asia/Novosibirsk</a>, <a href="#AsiaOmsk">Asia/Omsk</a>, <a href="#AsiaVladivostok">Asia/Vladivostok</a>, <a href="#AsiaYakutsk">Asia/Yakutsk</a>, <a href="#AsiaYekaterinburg">Asia/Yekaterinburg</a>, <a href="#EuropeKaliningrad">Europe/Kaliningrad</a>, <a href="#EuropeMoscow">Europe/Moscow</a>, <a href="#EuropeSamara">Europe/Samara</a></td></tr>
<tr valign=top><td nowrap>RW (Rwanda)</td><td><a href="#AfricaKigali">Africa/Kigali</a></td></tr>
<tr valign=top><td nowrap>SA (Saudi Arabia)</td><td><a href="#AsiaRiyadh">Asia/Riyadh</a></td></tr>
<tr valign=top><td nowrap>SB (Solomon Islands)</td><td><a href="#PacificGuadalcanal">Pacific/Guadalcanal</a>, <a href="#SST">SST</a></td></tr>
<tr valign=top><td nowrap>SC (Seychelles)</td><td><a href="#IndianMahe">Indian/Mahe</a></td></tr>
<tr valign=top><td nowrap>SD (Sudan)</td><td><a href="#AfricaKhartoum">Africa/Khartoum</a></td></tr>
<tr valign=top><td nowrap>SE (Sweden)</td><td><a href="#EuropeStockholm">Europe/Stockholm</a></td></tr>
<tr valign=top><td nowrap>SG (Singapore)</td><td><a href="#AsiaSingapore">Asia/Singapore</a></td></tr>
<tr valign=top><td nowrap>SH (St Helena)</td><td><a href="#AtlanticSt_Helena">Atlantic/St_Helena</a></td></tr>
<tr valign=top><td nowrap>SI (Slovenia)</td><td><a href="#EuropeLjubljana">Europe/Ljubljana</a></td></tr>
<tr valign=top><td nowrap>SJ (Svalbard & Jan Mayen)</td><td><a href="#ArcticLongyearbyen">Arctic/Longyearbyen</a>, <a href="#AtlanticJan_Mayen">Atlantic/Jan_Mayen</a></td></tr>
<tr valign=top><td nowrap>SK (Slovakia)</td><td><a href="#EuropeBratislava">Europe/Bratislava</a></td></tr>
<tr valign=top><td nowrap>SL (Sierra Leone)</td><td><a href="#AfricaFreetown">Africa/Freetown</a></td></tr>
<tr valign=top><td nowrap>SM (San Marino)</td><td><a href="#EuropeSan_Marino">Europe/San_Marino</a></td></tr>
<tr valign=top><td nowrap>SN (Senegal)</td><td><a href="#AfricaDakar">Africa/Dakar</a></td></tr>
<tr valign=top><td nowrap>SO (Somalia)</td><td><a href="#AfricaMogadishu">Africa/Mogadishu</a></td></tr>
<tr valign=top><td nowrap>SR (Suriname)</td><td><a href="#AmericaParamaribo">America/Paramaribo</a></td></tr>
<tr valign=top><td nowrap>ST (Sao Tome & Principe)</td><td><a href="#AfricaSao_Tome">Africa/Sao_Tome</a></td></tr>
<tr valign=top><td nowrap>SV (El Salvador)</td><td><a href="#AmericaEl_Salvador">America/El_Salvador</a></td></tr>
<tr valign=top><td nowrap>SY (Syria)</td><td><a href="#AsiaDamascus">Asia/Damascus</a></td></tr>
<tr valign=top><td nowrap>SZ (Swaziland)</td><td><a href="#AfricaMbabane">Africa/Mbabane</a></td></tr>
<tr valign=top><td nowrap>TC (Turks & Caicos Is)</td><td><a href="#AmericaGrand_Turk">America/Grand_Turk</a></td></tr>
<tr valign=top><td nowrap>TD (Chad)</td><td><a href="#AfricaNdjamena">Africa/Ndjamena</a></td></tr>
<tr valign=top><td nowrap>TF (French Southern & Antarctic Lands)</td><td><a href="#IndianKerguelen">Indian/Kerguelen</a></td></tr>
<tr valign=top><td nowrap>TG (Togo)</td><td><a href="#AfricaLome">Africa/Lome</a></td></tr>
<tr valign=top><td nowrap>TH (Thailand)</td><td><a href="#AsiaBangkok">Asia/Bangkok</a></td></tr>
<tr valign=top><td nowrap>TJ (Tajikistan)</td><td><a href="#AsiaDushanbe">Asia/Dushanbe</a></td></tr>
<tr valign=top><td nowrap>TK (Tokelau)</td><td><a href="#PacificFakaofo">Pacific/Fakaofo</a></td></tr>
<tr valign=top><td nowrap>TM (Turkmenistan)</td><td><a href="#AsiaAshgabat">Asia/Ashgabat</a></td></tr>
<tr valign=top><td nowrap>TN (Tunisia)</td><td><a href="#AfricaTunis">Africa/Tunis</a></td></tr>
<tr valign=top><td nowrap>TO (Tonga)</td><td><a href="#PacificTongatapu">Pacific/Tongatapu</a></td></tr>
<tr valign=top><td nowrap>TP (East Timor)</td><td><a href="#AsiaDili">Asia/Dili</a></td></tr>
<tr valign=top><td nowrap>TR (Turkey)</td><td><a href="#EuropeIstanbul">Europe/Istanbul</a></td></tr>
<tr valign=top><td nowrap>TT (Trinidad & Tobago)</td><td><a href="#AmericaPort_of_Spain">America/Port_of_Spain</a></td></tr>
<tr valign=top><td nowrap>TV (Tuvalu)</td><td><a href="#PacificFunafuti">Pacific/Funafuti</a></td></tr>
<tr valign=top><td nowrap>TW (Taiwan)</td><td><a href="#AsiaTaipei">Asia/Taipei</a></td></tr>
<tr valign=top><td nowrap>TZ (Tanzania)</td><td><a href="#AfricaDar_es_Salaam">Africa/Dar_es_Salaam</a></td></tr>
<tr valign=top><td nowrap>UA (Ukraine)</td><td><a href="#EuropeKiev">Europe/Kiev</a>, <a href="#EuropeSimferopol">Europe/Simferopol</a>, <a href="#EuropeUzhgorod">Europe/Uzhgorod</a>, <a href="#EuropeZaporozhye">Europe/Zaporozhye</a></td></tr>
<tr valign=top><td nowrap>UG (Uganda)</td><td><a href="#AfricaKampala">Africa/Kampala</a></td></tr>
<tr valign=top><td nowrap>UM (US minor outlying islands)</td><td><a href="#PacificJohnston">Pacific/Johnston</a>, <a href="#PacificMidway">Pacific/Midway</a>, <a href="#PacificWake">Pacific/Wake</a></td></tr>
<tr valign=top><td nowrap>US (United States)</td><td><a href="#AST">AST</a>, <a href="#AmericaAdak">America/Adak</a>, <a href="#AmericaAnchorage">America/Anchorage</a>, <a href="#AmericaBoise">America/Boise</a>, <a href="#AmericaChicago">America/Chicago</a>, <a href="#AmericaDenver">America/Denver</a>, <a href="#AmericaDetroit">America/Detroit</a>, <a href="#AmericaIndianaKnox">America/Indiana/Knox</a>, <a href="#AmericaIndianaMarengo">America/Indiana/Marengo</a>, <a href="#AmericaIndianaVevay">America/Indiana/Vevay</a>, <a href="#AmericaIndianapolis">America/Indianapolis</a>, <a href="#AmericaJuneau">America/Juneau</a>, <a href="#AmericaKentuckyMonticello">America/Kentucky/Monticello</a>, <a href="#AmericaLos_Angeles">America/Los_Angeles</a>, <a href="#AmericaLouisville">America/Louisville</a>, <a href="#AmericaMenominee">America/Menominee</a>, <a href="#AmericaNew_York">America/New_York</a>, <a href="#AmericaNome">America/Nome</a>, <a href="#AmericaPhoenix">America/Phoenix</a>, <a href="#AmericaYakutat">America/Yakutat</a>, <a href="#CST">CST</a>, <a href="#EST">EST</a>, <a href="#HST">HST</a>, <a href="#IET">IET</a>, <a href="#MST">MST</a>, <a href="#PNT">PNT</a>, <a href="#PST">PST</a>, <a href="#PacificHonolulu">Pacific/Honolulu</a></td></tr>
<tr valign=top><td nowrap>UY (Uruguay)</td><td><a href="#AmericaMontevideo">America/Montevideo</a></td></tr>
<tr valign=top><td nowrap>UZ (Uzbekistan)</td><td><a href="#AsiaSamarkand">Asia/Samarkand</a>, <a href="#AsiaTashkent">Asia/Tashkent</a></td></tr>
<tr valign=top><td nowrap>VA (Vatican City)</td><td><a href="#EuropeVatican">Europe/Vatican</a></td></tr>
<tr valign=top><td nowrap>VC (St Vincent)</td><td><a href="#AmericaSt_Vincent">America/St_Vincent</a></td></tr>
<tr valign=top><td nowrap>VE (Venezuela)</td><td><a href="#AmericaCaracas">America/Caracas</a></td></tr>
<tr valign=top><td nowrap>VG (Virgin Islands (UK))</td><td><a href="#AmericaTortola">America/Tortola</a></td></tr>
<tr valign=top><td nowrap>VI (Virgin Islands (US))</td><td><a href="#AmericaSt_Thomas">America/St_Thomas</a></td></tr>
<tr valign=top><td nowrap>VN (Vietnam)</td><td><a href="#AsiaSaigon">Asia/Saigon</a>, <a href="#VST">VST</a></td></tr>
<tr valign=top><td nowrap>VU (Vanuatu)</td><td><a href="#PacificEfate">Pacific/Efate</a></td></tr>
<tr valign=top><td nowrap>WF (Wallis & Futuna)</td><td><a href="#PacificWallis">Pacific/Wallis</a></td></tr>
<tr valign=top><td nowrap>WS (Samoa (Western))</td><td><a href="#MIT">MIT</a>, <a href="#PacificApia">Pacific/Apia</a></td></tr>
<tr valign=top><td nowrap>YE (Yemen)</td><td><a href="#AsiaAden">Asia/Aden</a></td></tr>
<tr valign=top><td nowrap>YT (Mayotte)</td><td><a href="#IndianMayotte">Indian/Mayotte</a></td></tr>
<tr valign=top><td nowrap>YU (Yugoslavia)</td><td><a href="#EuropeBelgrade">Europe/Belgrade</a></td></tr>
<tr valign=top><td nowrap>ZA (South Africa)</td><td><a href="#AfricaJohannesburg">Africa/Johannesburg</a></td></tr>
<tr valign=top><td nowrap>ZM (Zambia)</td><td><a href="#AfricaLusaka">Africa/Lusaka</a></td></tr>
<tr valign=top><td nowrap>ZW (Zimbabwe)</td><td><a href="#AfricaHarare">Africa/Harare</a>, <a href="#CAT">CAT</a></td></tr>
</table>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -62,6 +62,7 @@ const TimeZone* TimeZone::GMT = new SimpleTimeZone(0, GMT_ID);
const TZHeader * TimeZone::DATA = 0;
const uint32_t* TimeZone::INDEX_BY_ID = 0;
const OffsetIndex* TimeZone::INDEX_BY_OFFSET = 0;
const CountryIndex* TimeZone::INDEX_BY_COUNTRY = 0;
UnicodeString* TimeZone::ZONE_IDS = 0;
UBool TimeZone::DATA_LOADED = FALSE;
UDataMemory* TimeZone::UDATA_POINTER = 0;
@ -96,6 +97,8 @@ void TimeZone::loadZoneData() {
(const uint32_t*)((int8_t*)DATA + DATA->nameIndexDelta);
INDEX_BY_OFFSET =
(const OffsetIndex*)((int8_t*)DATA + DATA->offsetIndexDelta);
INDEX_BY_COUNTRY =
(const CountryIndex*)((int8_t*)DATA + DATA->countryIndexDelta);
// Construct the available IDs array. The ordering
// of this array conforms to the ordering of the
@ -446,6 +449,74 @@ TimeZone::createAvailableIDs(int32_t rawOffset, int32_t& numIDs)
// -------------------------------------
const UnicodeString** const
TimeZone::createAvailableIDs(const char* country, int32_t& numIDs) {
// We are creating a new array to existing UnicodeString pointers.
// The caller will delete the array when done, but not the pointers
// in the array.
if (!DATA_LOADED) {
loadZoneData();
}
if (0 == DATA) {
numIDs = 0;
return 0;
}
/* The country index table is a table of variable-sized objects.
* Each entry has an offset to the next entry; the last entry has
* a next entry offset of zero.
*
* The entries are sorted in ascending numerical order of intcode.
* This is an integer representation of the 2-letter ISO 3166
* country code. It is computed as (c1-'A')*32 + (c0-'A'), where
* the country code is c1 c0, with 'A' <= ci <= 'Z'.
*
* The list of zones is a list of integers, from 0..n-1, where n
* is the total number of system zones. The numbering corresponds
* exactly to the ordering of ZONE_IDS.
*/
const CountryIndex* index = INDEX_BY_COUNTRY;
uint16_t intcode = 0;
if (country != NULL && *country != NULL) {
intcode = ((country[0] - 'A') << 5) + (country[1] - 'A');
}
for (;;) {
if (index->intcode > intcode) {
// Went past our desired country; no match found
break;
}
if (index->intcode == intcode) {
// Found our desired country
const UnicodeString** const result =
(const UnicodeString** const) new UnicodeString*[index->count];
const uint16_t* zoneNumberArray = &(index->zoneNumber);
for (uint16_t i=0; i<index->count; ++i) {
// Pointer assignment - use existing UnicodeString object!
// Don't create a new UnicodeString on the heap here!
result[i] = &ZONE_IDS[zoneNumberArray[i]];
}
numIDs = index->count;
return result;
}
// Compute the position of the next entry. If the delta value
// in this entry is zero, then there is no next entry.
uint16_t delta = index->nextEntryDelta;
if (delta == 0) {
break;
}
index = (const CountryIndex*)((int8_t*)index + delta);
}
numIDs = 0;
return 0;
}
// -------------------------------------
const UnicodeString** const
TimeZone::createAvailableIDs(int32_t& numIDs)
{

View file

@ -6,6 +6,7 @@
* Date Name Description
* 11/24/99 aliu Creation.
* 12/13/1999 srl Padded OffsetIndex to 4 byte values
* 02/01/01 aliu Added country index
**********************************************************************
*/
@ -48,23 +49,6 @@
* data structure could be modified to index into the name table
* directly.)
*
* In the following table, sizes are estimated sizes for a zone list
* of about 200 standard and 200 DST zones, which is typical in 1999.
*
* [THIS IS OBSOLETE - Needs updating for format 3]
* 0K TZHeader
* 2K Standard zone table (StandardZone[])
* 4K DST zone table (Zone[])
* 2K Index table, sorted by name, 4 bytes / zone
* This is a list of 'count' deltas sorted in ascending
* lexicographic order of name string.
* 1K Index table, sorted by gmtOffset then name. See
* OffsetIndex struct.
* 6K Name table - always last
* This is all the zone names, in lexicographic order,
* with zero bytes terminating each name.
* 14K TOTAL
*
* Any field with a name ending in "delta" is an offset value
* from the first byte of the TZHeader structure, unless otherwise
* specified.
@ -91,7 +75,7 @@ static const uint8_t TZ_SIG_3 = 0x65; // e
// This must match the version number at the top of tz.txt as
// well as the version number in the udata header.
static const int8_t TZ_FORMAT_VERSION = 3; // formatVersion[0]
static const int8_t TZ_FORMAT_VERSION = 4; // formatVersion[0]
struct TZHeader {
uint16_t versionYear; // e.g. "1999j" -> 1999
@ -102,6 +86,8 @@ struct TZHeader {
uint32_t equivTableDelta; // delta to equivalency group table
uint32_t offsetIndexDelta; // delta to gmtOffset index table
uint32_t countryIndexDelta; // delta to country code index table
uint32_t nameIndexDelta; // delta to name index table
// The name index table is an array of 'count' 32-bit offsets from
// the start of this header to equivalency group table entries.
@ -194,4 +180,24 @@ struct OffsetIndex {
// a size of 4n. nextEntryDelta skips over any padding.
};
/**
* This variable-sized struct makes up the country index table. To get
* from one table entry to the next, add the nextEntryDelta. If the
* nextEntryDelta is zero then this is the last entry. The country
* index table is designed for sequential access, not random access.
*
* The intcode is an integer representation of the two-letter country
* code. It is computed as (c1-'A')*32 + (c0-'A') where the country
* code is a two-character string c1 c0, 'A' <= ci <= 'Z'.
*
* There are no 4-byte integers in this table, so we don't 4-align the
* entries.
*/
struct CountryIndex {
uint16_t intcode; // see above
uint16_t nextEntryDelta;
uint16_t count;
uint16_t zoneNumber; // There are actually 'count' uint16_t's here
};
#endif

View file

@ -34,6 +34,7 @@
class SimpleTimeZone;
struct TZHeader;
struct OffsetIndex;
struct CountryIndex;
struct TZEquivalencyGroup;
/**
@ -159,6 +160,27 @@ public:
*/
static const UnicodeString** const createAvailableIDs(int32_t rawOffset, int32_t& numIDs);
/**
* Returns a list of time zone IDs associated with the given
* country. Some zones are affiliated with no country (e.g.,
* "UTC"); these may also be retrieved, as a group.
*
* <P>The caller owns the list that is returned, but does not own
* the strings contained in that list. Delete the array, but
* <b>DON'T</b> delete the elements in the array.
*
* @param country The ISO 3166 two-letter country code, or NULL to
* retrieve zones not affiliated with any country.
* @param numIDs Receives the number of items in the array that is
* returned.
* @return An array of UnicodeString pointers, where each
* UnicodeString is a time zone ID for a time zone with the given
* GMT offset. If there is no timezone that matches the GMT
* offset specified, NULL is returned.
*/
static const UnicodeString** const createAvailableIDs(const char* country,
int32_t& numIDs);
/**
* Returns a list of all time zone IDs supported by the TimeZone class (i.e., all
* IDs that it's legal to pass to createTimeZone()). The caller owns the list that
@ -539,6 +561,13 @@ private:
*/
static const OffsetIndex* INDEX_BY_OFFSET;
/**
* INDEX_BY_COUNTRY is a CountryIndex table. This table can
* be walked through sequentially because the entries are of
* variable size.
*/
static const CountryIndex* INDEX_BY_COUNTRY;
////////////////////////////////////////////////////////////////
// Other system zone data structures
////////////////////////////////////////////////////////////////

View file

@ -19,6 +19,14 @@
#include <crtdbg.h>
#endif
#define CASE(id,test) case id: \
name = #test; \
if (exec) { \
logln(#test "---"); logln(""); \
test(); \
} \
break
// *****************************************************************************
// class TimeZoneTest
// *****************************************************************************
@ -27,79 +35,17 @@ void TimeZoneTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
{
if (exec) logln("TestSuite TestTimeZone");
switch (index) {
case 0:
name = "TestPRTOffset";
if (exec) {
logln("TestPRTOffset---"); logln("");
TestPRTOffset();
}
break;
case 1:
name = "TestVariousAPI518";
if (exec) {
logln("TestVariousAPI518---"); logln("");
TestVariousAPI518();
}
break;
case 2:
name = "TestGetAvailableIDs913";
if (exec) {
logln("TestGetAvailableIDs913---"); logln("");
TestGetAvailableIDs913();
}
break;
case 3:
name = "TestGenericAPI";
if (exec) {
logln("TestGenericAPI---"); logln("");
TestGenericAPI();
}
break;
case 4:
name = "TestRuleAPI";
if (exec) {
logln("TestRuleAPI---"); logln("");
TestRuleAPI();
}
break;
case 5:
name = "TestShortZoneIDs";
if (exec) {
logln("TestShortZoneIDs---"); logln("");
TestShortZoneIDs();
}
break;
case 6:
name = "TestCustomParse";
if (exec) {
logln("TestCustomParse---"); logln("");
TestCustomParse();
}
break;
case 7:
name = "TestDisplayName";
if (exec) {
logln("TestDisplayName---"); logln("");
TestDisplayName();
}
break;
case 8:
name = "TestDSTSavings";
if (exec) {
logln("TestDSTSavings---"); logln("");
TestDSTSavings();
}
break;
case 9:
name = "TestAlternateRules";
if (exec) {
logln("TestAlternateRules---"); logln("");
TestAlternateRules();
}
break;
CASE(0, TestPRTOffset);
CASE(1, TestVariousAPI518);
CASE(2, TestGetAvailableIDs913);
CASE(3, TestGenericAPI);
CASE(4, TestRuleAPI);
CASE(5, TestShortZoneIDs);
CASE(6, TestCustomParse);
CASE(7, TestDisplayName);
CASE(8, TestDSTSavings);
CASE(9, TestAlternateRules);
CASE(10,TestCountries);
default: name = ""; break;
}
}
@ -594,14 +540,14 @@ void TimeZoneTest::TestShortZoneIDs()
const char* compatibilityMap[] = {
// This list is copied from tz.alias. If tz.alias
// changes, this list must be updated. Current as of 12/3/99
// changes, this list must be updated. Current as of 1/31/01
"ACT", "Australia/Darwin",
"AET", "Australia/Sydney",
"AGT", "America/Buenos_Aires",
"ART", "Africa/Cairo",
"AST", "America/Anchorage",
"BET", "America/Sao_Paulo",
"BST", "Asia/Dacca",
"BST", "Asia/Dhaka", // Spelling changed in 2000h
"CAT", "Africa/Harare",
"CNT", "America/St_Johns",
"CST", "America/Chicago",
@ -1055,3 +1001,48 @@ TimeZoneTest::TestAlternateRules()
errln(UnicodeString("The offset for 10AM, 10/17/98 should have been -5 hours, but we got ")
+ (offset / U_MILLIS_PER_HOUR) + " hours.");
}
/**
* Test country code support. Jitterbug 776.
*/
void TimeZoneTest::TestCountries() {
// Make sure America/Los_Angeles is in the "US" group, and
// Asia/Tokyo isn't. Vice versa for the "JP" group.
int32_t n;
const UnicodeString** s = TimeZone::createAvailableIDs("US", n);
UBool la = false, tokyo = false;
UnicodeString laZone("America/Los_Angeles", "");
UnicodeString tokyoZone("Asia/Tokyo", "");
int32_t i;
for (i=0; i<n; ++i) {
if (*s[i] == (laZone)) {
la = TRUE;
}
if (*s[i] == (tokyoZone)) {
tokyo = TRUE;
}
}
if (!la || tokyo) {
errln("FAIL: " + laZone + " in US = " + la);
errln("FAIL: " + tokyoZone + " in US = " + tokyo);
}
delete[] s;
s = TimeZone::createAvailableIDs("JP", n);
la = false; tokyo = false;
for (i=0; i<n; ++i) {
if (*s[i] == (laZone)) {
la = TRUE;
}
if (*s[i] == (tokyoZone)) {
tokyo = TRUE;
}
}
if (la || !tokyo) {
errln("FAIL: " + laZone + " in JP = " + la);
errln("FAIL: " + tokyoZone + " in JP = " + tokyo);
}
delete[] s;
}

View file

@ -69,6 +69,7 @@ public:
void TestDSTSavings(void);
void TestAlternateRules(void);
void TestCountries(void);
static const UDate INTERVAL;

View file

@ -6,6 +6,7 @@
* Date Name Description
* 11/24/99 aliu Creation.
* 09/26/00 aliu Support for equivalency groups added.
* 01/31/01 aliu Support for ISO 3166 country codes added.
**********************************************************************
*/
@ -94,11 +95,13 @@ class gentz {
TZHeader header;
TZEquivalencyGroup* equivTable;
OffsetIndex* offsetIndex;
CountryIndex* countryIndex;
uint32_t* nameToEquiv;
char* nameTable;
uint32_t equivTableSize; // Total bytes in equivalency group table
uint32_t offsetIndexSize; // Total bytes in offset index table
uint32_t countryIndexSize; // Total bytes in country index table
uint32_t nameToEquivSize; // Total bytes in nameToEquiv
uint32_t nameTableSize; // Total bytes in name table
@ -125,6 +128,8 @@ private:
OffsetIndex* parseOffsetIndexTable(FileStream* in);
CountryIndex* parseCountryIndexTable(FileStream* in);
char* parseNameTable(FileStream* in);
// Low level parsing and reading
@ -227,15 +232,19 @@ int32_t gentz::writeTzDatFile(const char *destdir) {
// Our order is:
// - equiv table
// - offset index
// - country index
// - name index (name to equiv map)
// - name table
// - name table (must be last!)
header.equivTableDelta = sizeof(header);
header.offsetIndexDelta = header.equivTableDelta + equivTableSize;
header.nameIndexDelta = header.offsetIndexDelta + offsetIndexSize;
header.countryIndexDelta = header.offsetIndexDelta + offsetIndexSize;
header.nameIndexDelta = header.countryIndexDelta + countryIndexSize;
// Must be last:
header.nameTableDelta = header.nameIndexDelta + nameToEquivSize;
if (header.equivTableDelta < 0 ||
header.offsetIndexDelta < 0 ||
header.countryIndexDelta < 0 ||
header.nameIndexDelta < 0 ||
header.nameTableDelta < 0) {
die("Table too big -- negative delta");
@ -258,6 +267,7 @@ int32_t gentz::writeTzDatFile(const char *destdir) {
udata_writeBlock(pdata, &header, sizeof(header));
udata_writeBlock(pdata, equivTable, equivTableSize);
udata_writeBlock(pdata, offsetIndex, offsetIndexSize);
udata_writeBlock(pdata, countryIndex, countryIndexSize);
udata_writeBlock(pdata, nameToEquiv, nameToEquivSize);
udata_writeBlock(pdata, nameTable, nameTableSize);
@ -267,8 +277,8 @@ int32_t gentz::writeTzDatFile(const char *destdir) {
}
if (dataLength != (sizeof(header) + equivTableSize +
offsetIndexSize + nameTableSize +
nameToEquivSize
offsetIndexSize + countryIndexSize +
nameTableSize + nameToEquivSize
)) {
die("Written file doesn't match expected size");
}
@ -287,6 +297,9 @@ void gentz::parseTzTextFile(FileStream* in) {
// Parse the GMT offset index table
offsetIndex = parseOffsetIndexTable(in);
// Parse the ISO 3166 country index table
countryIndex = parseCountryIndexTable(in);
}
/**
@ -498,6 +511,65 @@ OffsetIndex* gentz::parseOffsetIndexTable(FileStream* in) {
return (OffsetIndex*)result;
}
CountryIndex* gentz::parseCountryIndexTable(FileStream* in) {
uint32_t n = readIntegerLine(in, 1, MAX_ZONES);
// We know how big the whole thing will be: Each zone occupies an
// int, and each country adds 3 ints (one for the intcode, one for
// next entry offset, one for the zone count). Each int is 16
// bits.
//
// Everything is 16-bits, so we don't 4-align the entries.
// However, we do pad at the end of the table to make the whole
// thing of size 4n, if necessary.
uint32_t expectedSize = n*(sizeof(CountryIndex)-sizeof(uint16_t)) +
header.count * sizeof(uint16_t);
uint32_t pad = (4 - (expectedSize % 4)) % 4; // This will be 0 or 2
int8_t *result = new int8_t[expectedSize + pad];
if (result == 0) {
die("Out of memory");
}
// Read each line and construct the corresponding entry.
// Along the way, make sure we don't write past 'limit'.
CountryIndex* index = (CountryIndex*)result;
int8_t* limit = ((int8_t*)result) + expectedSize; // Don't include pad
uint32_t i;
for (i=0; i<n && (int8_t*)(&index->zoneNumber) < limit; ++i) {
readLine(in);
char* p = buffer;
index->intcode = (uint16_t)parseInteger(p, SEP, 0, 25*32+25 /*ZZ*/);
index->count = (uint16_t)parseInteger(p, SEP, 0, header.count-1);
uint16_t* zoneNumberArray = &(index->zoneNumber);
if ((int8_t*)(&index->zoneNumber + index->count - 1) >= limit) {
// Oops -- out of space
break;
}
for (uint16_t j=0; j<index->count; ++j) {
zoneNumberArray[j] = (uint16_t)
parseInteger(p, (j==(index->count-1))?NUL:SEP,
0, header.count-1);
}
int8_t* nextIndex = (int8_t*)&(zoneNumberArray[index->count]);
index->nextEntryDelta = (uint16_t) ((i==(n-1)) ? 0 : (nextIndex - (int8_t*)index));
index = (CountryIndex*)nextIndex;
}
readEndMarker(in);
// Make sure size matches expected value, and pad the total size
countryIndexSize = (int8_t*)index - (int8_t*)result + pad;
if (i != n || countryIndexSize != expectedSize) {
die("Yikes! Interal error while constructing offset index table");
}
if (pad != 0) {
countryIndexSize += pad;
*(uint16_t*)index = 0; // Clear pad bits
}
fprintf(stdout, " Read %lu country index table entries, in-memory size %ld bytes\n",
n, countryIndexSize);
return (CountryIndex*)result;
}
void gentz::parseHeader(FileStream* in) {
int32_t version = readIntegerLine(in, 0, 0xFFFF);

View file

@ -3,6 +3,9 @@ and others. All Rights Reserved.
Readme file for ICU time zone data (source/tools/gentz)
Alan Liu
Last updated 2 Feb 2001
RAW DATA
--------
@ -19,7 +22,8 @@ Two tools are used to process the data into a format suitable for ICU:
gentz tz.txt -> tz.dat (memory mappable binary file)
After gentz is run, standard ICU data tools are used to incorporate
tz.dat into the icudata module.
tz.dat into the icudata module. The tz.pl script is run manually;
everything else is automatic.
In order to incorporate the raw data from that source into ICU, take
the following steps.
@ -34,19 +38,24 @@ the following steps.
3. Run the perl script tz.pl, passing it the directory location as a
command-line argument. On Windows system use the batch file
tz.bat. The output of this step is the intermediate text file
source/tools/gentz/tz.txt.
tz.bat. Also specify one or more ourput files: .txt, .htm|.html,
and .java.
As the second argument, pass in "tz.htm". This will generate an
html documentation file that goes into the icu/docs directory.
For ICU4C specify .txt and .htm; typically
<icu>/data/timezone.txt <icu>/docs/tz.htm
where icu is the ICU4C root directory. Double check that these are
the correct locations and file names; they change periodically.
As the third argument, pass in "tz.java". This will generate a
java source file that will be used to update the ICU4J data.
4. Run source/tools/makedata on Windows. On UNIX systems the
equivalent build steps are performed by 'make' and 'make install'.
4. Do a standard build. The build scripts will automatically detect
that a new .txt file is present and rebuild the binary data (using
gentz) from that.
The tz.txt and tz.htm files and typically checked into CVS, whereas
The .txt and .htm files and typically checked into CVS, whereas
the raw data files are not, since they are readily available from the
URL listed above.
@ -100,6 +109,3 @@ inversion is explained in the UNIX zone data file "etcetera".
Briefly, this is done intentionally in order to comply with
POSIX-style signedness. In ICU we reproduce the UNIX zone behavior
faithfully, including this confusing aspect.
Alan Liu 1999

View file

@ -26,14 +26,14 @@ CTT Asia/Shanghai
EAT Africa/Addis_Ababa
ECT Europe/Paris
# EET Europe/Istanbul # EET is a standard UNIX zone
EST America/New_York
HST Pacific/Honolulu
EST America/New_York # Linked to America/Indianapolis in Olson
HST Pacific/Honolulu # Olson LINK
IET America/Indianapolis
IST Asia/Calcutta
JST Asia/Tokyo
# MET Asia/Tehran # MET is a standard UNIX zone
MIT Pacific/Apia
MST America/Denver
MST America/Denver # Linked to America/Phoenix in Olson
NET Asia/Yerevan
NST Pacific/Auckland
PLT Asia/Karachi
@ -41,5 +41,5 @@ PNT America/Phoenix
PRT America/Puerto_Rico
PST America/Los_Angeles
SST Pacific/Guadalcanal
UTC Etc/GMT
UTC Etc/UTC # Olson LINK
VST Asia/Saigon

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
######################################################################
# Copyright (C) 1999, International Business Machines
# Copyright (C) 1999-2001, International Business Machines
# Corporation and others. All Rights Reserved.
######################################################################
# See: ftp://elsie.nci.nih.gov/pub/tzdata<year>
@ -30,7 +30,7 @@
# - Lines may be followed by a comment; the parser must ignore
# anything of the form /\s+#.*$/ in each line.
# |3065,14400 # Asia/Dubai GMT+4:00
# - The file contains a header and 3 lists.
# - The file contains a header and 4 lists.
# - The header contains the version of this data file:
# 2 original version, without equivalency groups
# 3 current version, described here
@ -89,6 +89,20 @@
# | -39600,374,6,279,366,374,394,396,399 # -11:00 d=Pacific/Apia Etc/GMT+11 MIT Pacific/Apia Pacific/Midway Pacific/Niue Pacific/Pago_Pago
# ...
# | end
# - The fourth list is an index by ISO 3166 country code. Each line
# lists a country and the zones mapped into that country by the
# zone.tab file. Zones not mapped into any file are listed on the
# first line. The first number on each line is the intcode for the
# country code. The intcode for 'US' for example is ('U'-'A') * 32
# + ('S' - 'A') == 658. The second number is the count of list
# items, and the following number are the zone indices.
# | 238 # index by country entries to follow
# | 0,38,230,231,232,276,282,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,364,380,429,431 # (None) Asia/Riyadh87 Asia/Riyadh88 Asia/Riyadh89 CET EET Etc/GMT Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2 Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7 Etc/GMT+8 Etc/GMT+9 Etc/GMT-1 Etc/GMT-10 Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2 Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7 Etc/GMT-8 Etc/GMT-9 Etc/UCT Etc/UTC GMT MET UTC WET
# | 3,1,314 # AD (Andorra) Europe/Andorra
# | 4,1,199 # AE (United Arab Emirates) Asia/Dubai
# | ...
# | 822,2,28,275 # ZW (Zimbabwe) Africa/Harare CAT
# | end
######################################################################
# As of 1999j, here are the various possible values taken by the
# rule fields. See code below that generates this data.
@ -108,8 +122,9 @@ use strict;
use Getopt::Long;
use vars qw(@FILES $YEAR $DATA_DIR $OUT $SEP @MONTH
$VERSION_YEAR $VERSION_SUFFIX $RAW_VERSION
$TZ_ALIAS $TZ_DEFAULT $URL $HTML_FILE $JAVA_FILE
$TZ_TXT_VERSION %ZONE_ID_TO_INDEX $END_MARKER);
$TZ_ALIAS $TZ_DEFAULT $URL $TXT_FILE $HTML_FILE $JAVA_FILE
$TZ_TXT_VERSION %ZONE_ID_TO_INDEX $END_MARKER
%COUNTRY_CODES);
require 'dumpvar.pl';
use tzparse;
use tzutil;
@ -119,10 +134,10 @@ use tzutil;
# 1 - unreleased version (?)
# 2 - original version
# 3 - added equivalency groups
$TZ_TXT_VERSION = 3;
# 4 - added country code index
$TZ_TXT_VERSION = 4;
# File names
$OUT = 'tz.txt';
$TZ_ALIAS = 'tz.alias';
$TZ_DEFAULT = 'tz.default';
@ -161,6 +176,40 @@ if (!$DATA_DIR || ! -d $DATA_DIR) {
usage();
}
$TXT_FILE = '';
$HTML_FILE = '';
$JAVA_FILE = '';
while (@ARGV) {
local $_ = shift;
if (/\.java$/i) {
if ($JAVA_FILE) {
print STDERR "Error: Multiple java files specified\n";
usage();
}
$JAVA_FILE = $_;
} elsif (/\.html?$/i) {
if ($HTML_FILE) {
print STDERR "Error: Multiple html files specified\n";
usage();
}
$HTML_FILE = $_;
} elsif (/\.txt$/i) {
if ($TXT_FILE) {
print STDERR "Error: Multiple txt files specified\n";
usage();
}
$TXT_FILE = $_;
} else {
print STDERR "Error: Unexpected command line parameter \"$_\"\n";
usage();
}
}
if (!($TXT_FILE || $JAVA_FILE || $HTML_FILE)) {
print STDERR "Nothing to do! Please specify one or more output files.\n";
usage();
}
if ($DATA_DIR =~ /(tzdata(\d{4})(\w?))/) {
$RAW_VERSION = $1;
$VERSION_YEAR = $2;
@ -184,15 +233,6 @@ if ($DATA_DIR =~ /(tzdata(\d{4})(\w?))/) {
usage();
}
$HTML_FILE = shift;
if ($HTML_FILE =~ /\.java$/i) {
$JAVA_FILE = $HTML_FILE;
$HTML_FILE = shift;
} else {
$JAVA_FILE = shift;
}
@MONTH = qw(jan feb mar apr may jun
jul aug sep oct nov dec);
@ -200,22 +240,23 @@ main();
exit();
sub usage {
print STDERR "Usage: $0 data_dir [html_out] [java_out]\n\n";
print STDERR "data_dir contains the unpacked files from\n";
print STDERR "$URL/tzdataYYYYR,\n";
print STDERR "where YYYY is the year and R is the revision\n";
print STDERR "letter.\n";
print STDERR "Usage: $0 data_dir [txt_out] [html_out] [java_out]\n\n";
print STDERR " data_dir contains the unpacked files from\n";
print STDERR " $URL/tzdataYYYYR,\n";
print STDERR " where YYYY is the year and R is the revision\n";
print STDERR " letter.\n";
print STDERR "\n";
print STDERR "Files that are expected to be present are:\n";
print STDERR join(", ", @FILES), "\n";
print STDERR " Files that are expected to be present are:\n";
print STDERR " ", join(", ", @FILES), "\n";
print STDERR "\n";
print STDERR "[html_out] optional name of HTML file to output\n";
print STDERR "[java_out] optional name of Java file to output\n";
print STDERR " [txt_out] optional name of .txt file to output\n";
print STDERR " [html_out] optional name of .htm|.html file to output\n";
print STDERR " [java_out] optional name of .java file to output\n";
exit 1;
}
sub main {
my (%ZONES, %RULES, @EQUIV);
my (%ZONES, %RULES, @EQUIV, %LINKS, %COUNTRIES);
print "Reading";
foreach (@FILES) {
@ -224,13 +265,33 @@ sub main {
usage();
}
print ".";
TZ::ParseFile("$DATA_DIR/$_", \%ZONES, \%RULES, $YEAR);
TZ::ParseFile("$DATA_DIR/$_", \%ZONES, \%RULES, \%LINKS, $YEAR);
}
print "done\n";
# Add country data from zone.tab
TZ::ParseZoneTab("$DATA_DIR/zone.tab", \%ZONES, \%LINKS);
# We'll also read the iso3166.tab file here. We don't really need
# this except for documentation purposes (in generated files)
# and for the HTML file.
local(*FILE);
open(FILE, "$DATA_DIR/iso3166.tab") or die "Can't open $DATA_DIR/iso3166.tab";
while (<FILE>) {
s/\#.*//;
next unless (/\S/);
s/\s+$//;
if (/^([A-Z]{2})\s+(\S.*)/) {
$COUNTRY_CODES{$1} = $2; # Map from code to country name
} else {
print STDERR "Ignoring $DATA_DIR/iso3166.tab line: $_";
}
}
close(FILE);
TZ::Postprocess(\%ZONES, \%RULES);
my $aliases = incorporateAliases($TZ_ALIAS, \%ZONES);
my $aliases = incorporateAliases($TZ_ALIAS, \%ZONES, \%LINKS);
print
"Read ", scalar keys %ZONES, " current zones and ",
@ -247,27 +308,12 @@ sub main {
$ZONES{GMT} = \%GMT;
}
# Validate names and count total size
my $NAME_SIZE = 0;
# Validate names
foreach my $z (keys %ZONES) {
# Make sure zone IDs only contain invariant chars
assertInvariantChars($z);
$NAME_SIZE += 1 + length($z);
}
# Find the maximum number of zones with the same value of
# gmtOffset.
my %perOffset; # Hash of offset -> count
foreach my $z (keys %ZONES) {
# Use TZ::ParseOffset to normalize values - probably unnecessary
++$perOffset{TZ::ParseOffset($ZONES{$z}->{gmtoff})};
}
my $maxPerOffset = 0;
foreach (values %perOffset) {
$maxPerOffset = $_ if ($_ > $maxPerOffset);
}
# Create the offset index table, that includes the zones
# for each offset and the default zone for each offset.
# This is a hash{$name -> array ref}. Element [0] of
@ -276,14 +322,10 @@ sub main {
my $offsetIndex = createOffsetIndex(\%ZONES, $TZ_DEFAULT);
# Group zones into equivalency groups
my $maxPerEquiv = 0;
TZ::FormZoneEquivalencyGroups(\%ZONES, \%RULES, \@EQUIV);
print
"Equivalency groups (including unique zones): ",
scalar @EQUIV, "\n";
foreach my $eg (@EQUIV) {
$maxPerEquiv = @$eg if (@$eg > $maxPerEquiv);
}
# Sort equivalency table first by GMT offset, then by
# alphabetic order of encoded rule string.
@ -306,133 +348,55 @@ sub main {
$ZONE_ID_TO_INDEX{$z} = $i++;
}
open(OUT,">$OUT") or die "Can't open $OUT for writing: $!";
# Create the country -> zone array hash
# This hash has the form:
# $COUNTRIES{'US'}->{zones}->[13] == "America/Los_Angeles"
# $COUNTRIES{'US'}->{intcode} == 658
############################################################
# EMIT HEADER
############################################################
# Zone data version
print OUT "#--- Header --- Generated by tz.pl\n";
print OUT $TZ_TXT_VERSION, " # format version number of this file\n";
print OUT $VERSION_YEAR, " # ($RAW_VERSION) version of Olson zone\n";
print OUT $VERSION_SUFFIX, " # data from $URL\n";
print OUT scalar keys %ZONES, " # total zone count\n";
# The following counts are all used by gentz during its parse
# of the tz.txt file and creation of the tz.dat file, even
# if they don't show up in the tz.dat file header. For example,
# gentz needs the maxPerOffset to preallocate the offset index
# entries. It needs the NAME_SIZE to allocate the big buffer
# that will receive all the names.
print OUT scalar @EQUIV, " # equivalency groups count\n";
print OUT $maxPerOffset, " # max zones with same gmtOffset\n";
print OUT $maxPerEquiv, " # max zones in an equivalency group\n";
print OUT $NAME_SIZE, " # length of name table in bytes\n";
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT ZONE TABLE
############################################################
# Output the name table, followed by 'end' keyword
print OUT "#--- Zone table ---\n";
print OUT "#| equiv_index,name\n";
print OUT scalar keys %ZONES, " # count of zones to follow\n";
# IMPORTANT: This sort must correspond to the sort
# order of UnicodeString::compare. That
# is, it must be a plain sort.
foreach my $z (sort keys %ZONES) {
# Make sure zone IDs only contain invariant chars
assertInvariantChars($z);
print OUT equivIndexOf($z, \@EQUIV), ',', $z, "\n";
}
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT EQUIVALENCY TABLE
############################################################
print OUT "#--- Equivalency table ---\n";
print OUT "#| ('s'|'d'),zone_spec,id_count,id_list\n";
print OUT scalar @EQUIV, " # count of equivalency groups to follow\n";
$i = 0;
foreach my $aref (@EQUIV) {
# $aref is an array ref; the array is full of zone IDs
# Use the ID of the first array element
my $z = $aref->[0];
# Output either 's' or 'd' to indicate standard or DST
my $isStd = ($ZONES{$z}->{rule} eq $TZ::STANDARD);
print OUT $isStd ? 's,' : 'd,';
# Format the zone
my ($spec, $notes) = formatZone($z, $ZONES{$z}, \%RULES);
# Now add the equivalency list
push @$spec, scalar @$aref;
push @$notes, "[";
my $min = -1;
foreach $z (@$aref) {
my $index = $ZONE_ID_TO_INDEX{$z};
# Make sure they are in order
die("Unsorted equiv table indices") if ($index <= $min);
$min = $index;
push @$spec, $index;
push @$notes, $z;
}
push @$notes, "]";
unshift @$notes, $i++; # Insert index of this group at front
print OUT join($SEP, @$spec) . " # " . join(' ', @$notes), "\n";
}
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT INDEX BY GMT OFFSET
############################################################
# Create a hash mapping zone name -> integer, from 0..n-1.
# Create an array mapping zone number -> name.
my %zoneNumber;
my @zoneName;
$i = 0;
# Some zones are not affiliated with any country (e.g., UTC). We
# use a fake country code for these, chosen to precede any real
# country code. 'A' or 'AA' work.
my $NONE = 'A';
foreach (sort keys %ZONES) {
$zoneName[$i] = $_;
$zoneNumber{$_} = $i++;
my $country = $ZONES{$_}->{country};
$country = $NONE unless ($country);
push @{$COUNTRIES{$country}->{zones}}, $_;
}
foreach my $country (keys %COUNTRIES) {
# Compute the int code, which is just a numerical
# rep. of the two letters. Use 0 to represent no
# country; this MUST BE CHANGED if AA ever becomes
# a valid country code.
my $intcode = 0;
if ($country ne $NONE) {
if ($country =~ /^([A-Z])([A-Z])$/) {
$intcode = ((ord($1) - ord('A')) << 5) |
(ord($2) - ord('A'));
} else {
die "Can't parse country code $country";
}
}
$COUNTRIES{$country}->{intcode} = $intcode;
}
# Emit offset index
print OUT "#--- Offset index ---\n";
print OUT "#| gmt_offset,default_id,id_count,id_list\n";
print OUT scalar keys %{$offsetIndex}, " # index by offset entries to follow\n";
foreach (sort {$a <=> $b} keys %{$offsetIndex}) {
my $aref = $offsetIndex->{$_};
my $def = $aref->[0];
# Make a slice of 1..n
my @b = @{$aref}[1..$#{$aref}];
print OUT
$_, ",", $zoneNumber{$def}, ",",
scalar @b, ",",
join(",", map($zoneNumber{$_}, @b)),
" # ", formatOffset($_), " d=", $def, " ",
join(" ", @b), "\n";
# Emit the text file
if ($TXT_FILE) {
emitText($TXT_FILE, \%ZONES, \%RULES, \@EQUIV, $offsetIndex, $aliases,
\%COUNTRIES);
print "$TXT_FILE written.\n";
}
print OUT $END_MARKER, "\n";
############################################################
# END
############################################################
close(OUT);
print "$OUT written.\n";
# Emit the Java file
if ($JAVA_FILE) {
emitJava($JAVA_FILE, \%ZONES, \%RULES, \@EQUIV, $offsetIndex, $aliases);
emitJava($JAVA_FILE, \%ZONES, \%RULES, \@EQUIV, $offsetIndex, $aliases,
\%COUNTRIES);
print "$JAVA_FILE written.\n";
}
# Emit the HTML file
if ($HTML_FILE) {
emitHTML($HTML_FILE, \%ZONES, \%RULES, \@EQUIV, $offsetIndex, $aliases);
emitHTML($HTML_FILE, \%ZONES, \%RULES, \@EQUIV, $offsetIndex, $aliases,
\%COUNTRIES);
print "$HTML_FILE written.\n";
}
@ -580,6 +544,183 @@ sub isDefault {
return ($aref->[0] eq $name);
}
# Emit a text file that contains data for the system time zones.
# Param: File name
# Param: ref to zone hash
# Param: ref to rule hash
# Param: ref to equiv table
# Param: ref to offset index
# Param: ref to alias hash
sub emitText {
my $file = shift;
my $zones = shift;
my $rules = shift;
my $equiv = shift;
my $offsetIndex = shift;
my $aliases = shift;
my $countries = shift;
# Find the maximum number of zones with the same value of
# gmtOffset.
my %perOffset; # Hash of offset -> count
foreach my $z (keys %$zones) {
# Use TZ::ParseOffset to normalize values - probably unnecessary
++$perOffset{TZ::ParseOffset($zones->{$z}->{gmtoff})};
}
my $maxPerOffset = 0;
foreach (values %perOffset) {
$maxPerOffset = $_ if ($_ > $maxPerOffset);
}
# Count maximum number of zones per equivalency group
my $maxPerEquiv = 0;
foreach my $eg (@$equiv) {
$maxPerEquiv = @$eg if (@$eg > $maxPerEquiv);
}
# Count total name size
my $name_size = 0;
foreach my $z (keys %$zones) {
$name_size += 1 + length($z);
}
local(*OUT);
open(OUT,">$file") or die "Can't open $file for writing: $!";
############################################################
# EMIT HEADER
############################################################
# Zone data version
print OUT "#--- Header --- Generated by tz.pl\n";
print OUT $TZ_TXT_VERSION, " # format version number of this file\n";
print OUT $VERSION_YEAR, " # ($RAW_VERSION) version of Olson zone\n";
print OUT $VERSION_SUFFIX, " # data from $URL\n";
print OUT scalar keys %$zones, " # total zone count\n";
# The following counts are all used by gentz during its parse
# of the tz.txt file and creation of the tz.dat file, even
# if they don't show up in the tz.dat file header. For example,
# gentz needs the maxPerOffset to preallocate the offset index
# entries. It needs the $name_size to allocate the big buffer
# that will receive all the names.
print OUT scalar @$equiv, " # equivalency groups count\n";
print OUT $maxPerOffset, " # max zones with same gmtOffset\n";
print OUT $maxPerEquiv, " # max zones in an equivalency group\n";
print OUT $name_size, " # length of name table in bytes\n";
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT ZONE TABLE
############################################################
# Output the name table, followed by 'end' keyword
print OUT "#--- Zone table ---\n";
print OUT "#| equiv_index,name\n";
print OUT scalar keys %$zones, " # count of zones to follow\n";
# IMPORTANT: This sort must correspond to the sort
# order of UnicodeString::compare. That
# is, it must be a plain sort.
foreach my $z (sort keys %$zones) {
# Make sure zone IDs only contain invariant chars
assertInvariantChars($z);
print OUT equivIndexOf($z, $equiv), ',', $z, "\n";
}
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT EQUIVALENCY TABLE
############################################################
print OUT "#--- Equivalency table ---\n";
print OUT "#| ('s'|'d'),zone_spec,id_count,id_list\n";
print OUT scalar @$equiv, " # count of equivalency groups to follow\n";
my $i = 0;
foreach my $aref (@$equiv) {
# $aref is an array ref; the array is full of zone IDs
# Use the ID of the first array element
my $z = $aref->[0];
# Output either 's' or 'd' to indicate standard or DST
my $isStd = ($zones->{$z}->{rule} eq $TZ::STANDARD);
print OUT $isStd ? 's,' : 'd,';
# Format the zone
my ($spec, $notes) = formatZone($z, $zones->{$z}, $rules);
# Now add the equivalency list
push @$spec, scalar @$aref;
push @$notes, "[";
my $min = -1;
foreach $z (@$aref) {
my $index = $ZONE_ID_TO_INDEX{$z};
# Make sure they are in order
die("Unsorted equiv table indices") if ($index <= $min);
$min = $index;
push @$spec, $index;
push @$notes, $z;
}
push @$notes, "]";
unshift @$notes, $i++; # Insert index of this group at front
print OUT join($SEP, @$spec) . " # " . join(' ', @$notes), "\n";
}
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT INDEX BY GMT OFFSET
############################################################
# Create a hash mapping zone name -> integer, from 0..n-1.
# Create an array mapping zone number -> name.
my %zoneNumber;
my @zoneName;
$i = 0;
foreach (sort keys %$zones) {
$zoneName[$i] = $_;
$zoneNumber{$_} = $i++;
}
# Emit offset index
print OUT "#--- Offset INDEX ---\n";
print OUT "#| gmt_offset,default_id,id_count,id_list\n";
print OUT scalar keys %{$offsetIndex}, " # index by offset entries to follow\n";
foreach (sort {$a <=> $b} keys %{$offsetIndex}) {
my $aref = $offsetIndex->{$_};
my $def = $aref->[0];
# Make a slice of 1..n
my @b = @{$aref}[1..$#{$aref}];
print OUT
$_, ",", $zoneNumber{$def}, ",",
scalar @b, ",",
join(",", map($zoneNumber{$_}, @b)),
" # ", formatOffset($_), " d=", $def, " ",
join(" ", @b), "\n";
}
print OUT $END_MARKER, "\n\n";
############################################################
# EMIT INDEX BY COUNTRY
############################################################
print OUT "#--- Country INDEX ---\n";
print OUT "#| country_int_code,id_count,id_list\n";
print OUT scalar keys %$countries, " # index by country entries to follow\n";
foreach my $country (sort keys %$countries) {
my $intcode = $countries->{$country}->{intcode};
my $aref = $countries->{$country}->{zones};
print OUT
$intcode, ",", scalar @$aref, ",",
join(",", map($zoneNumber{$_}, @$aref)), " # ",
($intcode ? ($country . " (" . $COUNTRY_CODES{$country} . ") ") : "(None) "),
join(" ", @$aref), "\n";
}
print OUT $END_MARKER, "\n";
############################################################
# END
############################################################
close(OUT);
}
# Emit a Java file that contains data for the system time zones.
# Param: File name
# Param: ref to zone hash
@ -594,6 +735,7 @@ sub emitJava {
my $equiv = shift;
my $offsetIndex = shift;
my $aliases = shift;
my $countries = shift;
my $_indent = " ";
@ -697,6 +839,23 @@ sub emitJava {
", // " . formatOffset($_) . " d=" . $def . " " .
join(" ", @b) . "\n";
}
############################################################
# Index by country
my $_INDEX_BY_COUNTRY;
foreach my $country (sort keys %$countries) {
my $intcode = $countries->{$country}->{intcode};
my $aref = $countries->{$country}->{zones};
# Emit int code (n1*32 + n0), #of zones,
# and list of zones.
$_INDEX_BY_COUNTRY .=
$_indent . $intcode . ", " .
scalar(@$aref) . ", " .
join(", ", map($zoneNumber{$_}, @$aref)) . ", // " .
($intcode ? ($country . " (" . $COUNTRY_CODES{$country} . ")") : "(None)") . ": " .
join(" ", @$aref) .
"\n";
}
############################################################
# BEGIN JAVA TEMPLATE
@ -755,6 +914,15 @@ public class tz {
System.out.println(Utility.formatForSource(Utility.arrayToRLEString(INDEX_BY_OFFSET)));
System.out.println(" ;\\n");
System.out.println(" /**");
System.out.println(" * RLE encoded form of INDEX_BY_COUNTRY.");
System.out.println(" * \@see com.ibm.util.Utility.RLEStringToIntArray");
System.out.println(" * >> GENERATED DATA: DO NOT EDIT <<");
System.out.println(" */");
System.out.println(" static final String INDEX_BY_COUNTRY_RLE =");
System.out.println(Utility.formatForSource(Utility.arrayToRLEString(INDEX_BY_COUNTRY)));
System.out.println(" ;\\n");
System.out.println(" // END GENERATED SOURCE CODE");
}
@ -766,7 +934,7 @@ $_IDS
$_DATA
};
static int[] INDEX_BY_NAME_ARRAY = { // not final!
static final int[] INDEX_BY_NAME_ARRAY = {
$_INDEX_BY_NAME
};
@ -774,6 +942,10 @@ $_INDEX_BY_NAME
// gmt_offset,default_id,id_count,id_list
$_INDEX_BY_OFFSET
};
static final int[] INDEX_BY_COUNTRY = {
$_INDEX_BY_COUNTRY
};
}
END
############################################################
@ -799,6 +971,7 @@ sub emitHTML {
my $equiv = shift;
my $offsetIndex = shift;
my $aliases = shift;
my $countries = shift;
# These are variables for the template
my $_count = scalar keys %{$zones};
@ -856,6 +1029,23 @@ sub emitHTML {
}
$_equivTable .= "</table>\n";
# Build country table
my $_countryTable;
$_countryTable .= "<p><table>\n";
$_countryTable .= "<tr><td>Country</td><td>Zones</td></tr>\n";
$_countryTable .= "<tr><td><hr></td><td><hr></td></tr>\n";
foreach my $country (sort keys %$countries) {
$_countryTable .=
"<tr valign=top><td nowrap>" .
(($country ne 'A') ? ($country . " (" . $COUNTRY_CODES{$country} . ")") : "(None)") .
"</td>" . "<td>" .
join(", ", map("<a href=\"#" . bookmark($_) . "\">$_</a>", @{$countries->{$country}->{zones}})) .
#join(", ", @{$countries->{$country}->{zones}}) .
"</td></tr>\n";
}
$_countryTable .= "</table>\n";
# Time stamp
my $_timeStamp = localtime;
@ -1010,6 +1200,15 @@ not at runtime, so the runtime cost to lookup the equivalency group of
a given zone is negligible.</p>
$_equivTable
<hr>
<h2>Time Zones by Country</h2>
<p>ICU captures and exports the country data from the Olson database.
The country code is the ISO 3166 two-letter code. Some zones have no
associated country; these are listed under the entry "(None)".
$_countryTable
</body>
</html>
END
@ -1105,10 +1304,12 @@ sub emitHTMLRule {
# sub should be called AFTER all standard zones have been read in.
# Param: File name of alias list
# Param: Ref to zone hash
# Param: Ref to LINK hash
# Return: Ref to hash of {alias name -> zone name}
sub incorporateAliases {
my $aliasFile = shift;
my $zones = shift;
my $links = shift;
my $n = 0;
my %hash;
local *IN;
@ -1126,6 +1327,11 @@ sub incorporateAliases {
die "Bad alias in $aliasFile: $alias maps to the nonexistent " .
"zone $original. Please fix this entry in the alias table.\n";
}
if (exists $links->{$alias} &&
$links->{$alias} ne $original) {
print STDERR "Warning: Alias $alias for $original exists as link for ",
$links->{$alias}, "\n";
}
# Create the alias!
$zones->{$alias} = $zones->{$original};
$hash{$alias} = $original;

View file

@ -9,8 +9,8 @@
# Author: Alan Liu
######################################################################
# Usage:
# Call ParseFile for each file to be imported. Then call Postprocess
# to remove unused rules and links.
# Call ParseFile for each file to be imported. Then call ParseZoneTab
# to add country data. Then call Postprocess to remove unused rules.
package TZ;
use strict;
@ -21,26 +21,87 @@ require 'dumpvar.pl';
@ISA = qw(Exporter);
@EXPORT = qw(ParseFile
Postprocess
ParseZoneTab
);
$VERSION = '0.1';
$VERSION = '0.2';
$STANDARD = '-'; # Name of the Standard Time rule
######################################################################
# Read the tzdata zone.tab file and add a {country} field to zones
# in the given hash.
# Param: File name (<dir>/zone.tab)
# Param: Ref to hash of zones
# Param: Ref to hash of links
sub ParseZoneTab {
my ($FILE, $ZONES, $LINKS) = @_;
my %linkEntries;
local(*FILE);
open(FILE,"<$FILE") or confess "Can't open $FILE: $!";
while (<FILE>) {
# Handle comments
s/\#.*//;
next if (!/\S/);
if (/^\s*([A-Z]{2})\s+[-+0-9]+\s+(\S+)/) {
my ($country, $zone) = ($1, $2);
if (exists $ZONES->{$zone}) {
$ZONES->{$zone}->{country} = $country;
} elsif (exists $LINKS->{$zone}) {
# We have a country mapping for a zone that isn't in
# our hash. This means it is a link entry. Save this
# then handle it below.
$linkEntries{$zone} = $country;
} else {
print STDERR "Nonexistent zone $zone in $FILE\n";
}
} else {
confess "Can't parse line \"$_\" of $FILE";
}
}
close(FILE);
# Now that we have mapped all of the zones in %$ZONES (except
# those without country affiliations), process the link entries.
# For those zones in the table that differ by country from their
# source zone, instantiate a new zone in the new country. An
# example is Europe/Vatican, which is linked to Europe/Rome. If
# we don't instantiate it, we have nothing for Vatican City.
# Another example is America/Shiprock, which links to
# America/Denver. These are identical and both in the US, so we
# don't instantiate America/Shiprock.
foreach my $zone (keys %linkEntries) {
my $country = $linkEntries{$zone};
my $linkZone = $LINKS->{$zone};
my $linkCountry = $ZONES->{$linkZone}->{country};
if ($linkCountry ne $country) {
# print "Cloning $zone ($country) from $linkZone ($linkCountry)\n";
_CloneZone($ZONES, $LINKS->{$zone}, $zone);
$ZONES->{$zone}->{country} = $country;
}
}
}
######################################################################
# Param: File name
# Param: Ref to hash of zones
# Param: Ref to hash of rules
# Parma: Ref to hash of links
# Param: Current year
sub ParseFile {
my ($FILE, $ZONES, $RULES, $YEAR) = @_;
my ($FILE, $ZONES, $RULES, $LINKS, $YEAR) = @_;
local(*FILE);
open(FILE,"<$FILE") or confess "Can't open $FILE: $!";
my $zone; # Current zone
my $badLineCount = 0;
while (<FILE>) {
# Handle comments and blanks
s/\#.*//;
next if (!/\S/);
#|# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#|Zone America/Montreal -4:54:16 - LMT 1884
#| -5:00 Mont E%sT
@ -160,11 +221,16 @@ sub ParseFile {
#|Link America/Indianapolis EST
#|Link America/Phoenix MST
#|Link Pacific/Honolulu HST
#
# There are also links for country-specific zones.
# These are zones the differ only in that they belong
# to a different country. E.g.,
#|Link Europe/Rome Europe/Vatican
#|Link Europe/Rome Europe/San_Marino
if (/^link\s+(\S+)\s+(\S+)/i) {
# We currently only record a single link -- if there
# are more than one, we should modify this.
my ($from, $to) = ($1, $2);
$ZONES->{$from}->{link} = $to;
# Record all links in $%LINKS
$LINKS->{$to} = $from;
} else {
print STDERR "Can't parse in $FILE: $_";
++$badLineCount;
@ -193,17 +259,18 @@ sub Postprocess {
my ($ZONES, $RULES) = @_;
my %ruleInUse;
# Eliminate zone links that have no corresponding zone
foreach (keys %$ZONES) {
if (exists $ZONES->{$_}->{link} && !exists $ZONES->{$_}->{rule}) {
if (0) {
print STDERR
"Deleting link from historical/nonexistent zone: ",
$_, " -> ", $ZONES->{$_}->{link}, "\n";
}
delete $ZONES->{$_};
}
}
# We no longer store links in the zone hash, so we don't need to do this.
# # Eliminate zone links that have no corresponding zone
# foreach (keys %$ZONES) {
# if (exists $ZONES->{$_}->{link} && !exists $ZONES->{$_}->{rule}) {
# if (0) {
# print STDERR
# "Deleting link from historical/nonexistent zone: ",
# $_, " -> ", $ZONES->{$_}->{link}, "\n";
# }
# delete $ZONES->{$_};
# }
# }
# Check that each zone has a corresponding rule. At the same
# time, build up a hash that marks each rule that is in use.
@ -244,3 +311,17 @@ sub Postprocess {
}
}
}
######################################################################
# Create a clone of the zone $oldID named $newID in the hash $ZONES.
# Param: ref to hash of zones
# Param: ID of zone to clone
# Param: ID of new zone
sub _CloneZone {
my $ZONES = shift;
my $oldID = shift;
my $newID = shift;
for my $field (keys %{$ZONES->{$oldID}}) {
$ZONES->{$newID}->{$field} = $ZONES->{$oldID}->{$field};
}
}

View file

@ -20,12 +20,14 @@
#|Zone America/Montreal -4:54:16 - LMT 1884
#| -5:00 Mont E%sT
# Optionally, a zone may also have the key:
# {link} An old name for this zone, e.g. "HST" (for Pacific/Honolulu)
# Links come from the file entries:
#|# Link LINK-FROM LINK-TO
#|Link America/New_York EST5EDT
#|Link America/Chicago CST6CDT
# Link data is _not_ stored in the zone hash. Instead, links are
# kept in a separate hash and resolved after all zones are defined.
# In general, we ignore links, but they provide critical data when
# generating country information.
# The name of the zone itself is not kept in the zone object.
# Instead, zones are kept in a big hash. The keys are the names; the
@ -36,7 +38,6 @@
# Example: $ZONES->{"America/Los_Angeles"} =
# 'format' => 'P%sT'
# 'gmtoff' => '-8:00'
# 'link' => 'US/Pacific-New'
# 'rule' => 'US'
# 'until' => ''
@ -227,7 +228,7 @@ sub FormZoneEquivalencyGroups {
sub ParseOffset {
local $_ = shift;
if (/^(-)?(\d{1,2})(:(\d\d))?(:(\d\d))?$/) {
# 1 2 4 6
# 1 2 3 4 5 6
my $a = (($2 * 60) + (defined $4?$4:0)) * 60 + (defined $6?$6:0);
$a = -$a if (defined $1 && $1 eq '-');
return $a;