summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2014-11-27 09:01:29 +0000
committer <>2015-02-24 12:17:05 +0000
commitc414cb801776e11c769fb36c0d37b8d7a7c8712c (patch)
tree3f8713d75d83bd7cbe06fdd7abe4d6826b2c923a
downloadpytz-tarball-c414cb801776e11c769fb36c0d37b8d7a7c8712c.tar.gz
Imported from /home/lorry/working-area/delta_pytz-tarball/pytz-2014.10.tar.gz.HEADpytz-2014.10master
-rw-r--r--CHANGES.txt54
-rw-r--r--LICENSE.txt19
-rw-r--r--MANIFEST.in5
-rw-r--r--PKG-INFO595
-rw-r--r--README.txt575
-rw-r--r--pytz.egg-info/PKG-INFO595
-rw-r--r--pytz.egg-info/SOURCES.txt607
-rw-r--r--pytz.egg-info/dependency_links.txt1
-rw-r--r--pytz.egg-info/top_level.txt1
-rw-r--r--pytz.egg-info/zip-safe1
-rw-r--r--pytz/__init__.py1513
-rw-r--r--pytz/exceptions.py48
-rw-r--r--pytz/lazy.py168
-rw-r--r--pytz/reference.py127
-rw-r--r--pytz/tests/test_docs.py34
-rw-r--r--pytz/tests/test_lazy.py313
-rw-r--r--pytz/tests/test_tzinfo.py837
-rw-r--r--pytz/tzfile.py137
-rw-r--r--pytz/tzinfo.py564
-rw-r--r--pytz/zoneinfo/Africa/Abidjanbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Accrabin0 -> 840 bytes
-rw-r--r--pytz/zoneinfo/Africa/Addis_Abababin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Algiersbin0 -> 760 bytes
-rw-r--r--pytz/zoneinfo/Africa/Asmarabin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Asmerabin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Bamakobin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Banguibin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Banjulbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Bissaubin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/Africa/Blantyrebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Brazzavillebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Bujumburabin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Cairobin0 -> 2779 bytes
-rw-r--r--pytz/zoneinfo/Africa/Casablancabin0 -> 1657 bytes
-rw-r--r--pytz/zoneinfo/Africa/Ceutabin0 -> 2075 bytes
-rw-r--r--pytz/zoneinfo/Africa/Conakrybin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Dakarbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Dar_es_Salaambin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Djiboutibin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Doualabin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/El_Aaiunbin0 -> 1487 bytes
-rw-r--r--pytz/zoneinfo/Africa/Freetownbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Gaboronebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Hararebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Johannesburgbin0 -> 271 bytes
-rw-r--r--pytz/zoneinfo/Africa/Jubabin0 -> 683 bytes
-rw-r--r--pytz/zoneinfo/Africa/Kampalabin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Khartoumbin0 -> 683 bytes
-rw-r--r--pytz/zoneinfo/Africa/Kigalibin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Kinshasabin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Lagosbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Librevillebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Lomebin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Luandabin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Lubumbashibin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Lusakabin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Malabobin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Maputobin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Maserubin0 -> 271 bytes
-rw-r--r--pytz/zoneinfo/Africa/Mbabanebin0 -> 271 bytes
-rw-r--r--pytz/zoneinfo/Africa/Mogadishubin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Monroviabin0 -> 241 bytes
-rw-r--r--pytz/zoneinfo/Africa/Nairobibin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Africa/Ndjamenabin0 -> 225 bytes
-rw-r--r--pytz/zoneinfo/Africa/Niameybin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Nouakchottbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Ouagadougoubin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Porto-Novobin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Africa/Sao_Tomebin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Timbuktubin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Africa/Tripolibin0 -> 655 bytes
-rw-r--r--pytz/zoneinfo/Africa/Tunisbin0 -> 710 bytes
-rw-r--r--pytz/zoneinfo/Africa/Windhoekbin0 -> 1582 bytes
-rw-r--r--pytz/zoneinfo/America/Adakbin0 -> 2379 bytes
-rw-r--r--pytz/zoneinfo/America/Anchoragebin0 -> 2384 bytes
-rw-r--r--pytz/zoneinfo/America/Anguillabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Antiguabin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/America/Araguainabin0 -> 896 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Buenos_Airesbin0 -> 1087 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Catamarcabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/ComodRivadaviabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Cordobabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Jujuybin0 -> 1145 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/La_Riojabin0 -> 1143 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Mendozabin0 -> 1173 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Rio_Gallegosbin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Saltabin0 -> 1101 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/San_Juanbin0 -> 1143 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/San_Luisbin0 -> 1171 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Tucumanbin0 -> 1157 bytes
-rw-r--r--pytz/zoneinfo/America/Argentina/Ushuaiabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Arubabin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/America/Asuncionbin0 -> 2062 bytes
-rw-r--r--pytz/zoneinfo/America/Atikokanbin0 -> 345 bytes
-rw-r--r--pytz/zoneinfo/America/Atkabin0 -> 2379 bytes
-rw-r--r--pytz/zoneinfo/America/Bahiabin0 -> 1036 bytes
-rw-r--r--pytz/zoneinfo/America/Bahia_Banderasbin0 -> 1588 bytes
-rw-r--r--pytz/zoneinfo/America/Barbadosbin0 -> 344 bytes
-rw-r--r--pytz/zoneinfo/America/Belembin0 -> 588 bytes
-rw-r--r--pytz/zoneinfo/America/Belizebin0 -> 976 bytes
-rw-r--r--pytz/zoneinfo/America/Blanc-Sablonbin0 -> 307 bytes
-rw-r--r--pytz/zoneinfo/America/Boa_Vistabin0 -> 644 bytes
-rw-r--r--pytz/zoneinfo/America/Bogotabin0 -> 257 bytes
-rw-r--r--pytz/zoneinfo/America/Boisebin0 -> 2403 bytes
-rw-r--r--pytz/zoneinfo/America/Buenos_Airesbin0 -> 1087 bytes
-rw-r--r--pytz/zoneinfo/America/Cambridge_Baybin0 -> 2098 bytes
-rw-r--r--pytz/zoneinfo/America/Campo_Grandebin0 -> 2015 bytes
-rw-r--r--pytz/zoneinfo/America/Cancunbin0 -> 1480 bytes
-rw-r--r--pytz/zoneinfo/America/Caracasbin0 -> 266 bytes
-rw-r--r--pytz/zoneinfo/America/Catamarcabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Cayennebin0 -> 200 bytes
-rw-r--r--pytz/zoneinfo/America/Caymanbin0 -> 203 bytes
-rw-r--r--pytz/zoneinfo/America/Chicagobin0 -> 3585 bytes
-rw-r--r--pytz/zoneinfo/America/Chihuahuabin0 -> 1522 bytes
-rw-r--r--pytz/zoneinfo/America/Coral_Harbourbin0 -> 345 bytes
-rw-r--r--pytz/zoneinfo/America/Cordobabin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Costa_Ricabin0 -> 341 bytes
-rw-r--r--pytz/zoneinfo/America/Crestonbin0 -> 233 bytes
-rw-r--r--pytz/zoneinfo/America/Cuiababin0 -> 1987 bytes
-rw-r--r--pytz/zoneinfo/America/Curacaobin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/America/Danmarkshavnbin0 -> 714 bytes
-rw-r--r--pytz/zoneinfo/America/Dawsonbin0 -> 2093 bytes
-rw-r--r--pytz/zoneinfo/America/Dawson_Creekbin0 -> 1059 bytes
-rw-r--r--pytz/zoneinfo/America/Denverbin0 -> 2453 bytes
-rw-r--r--pytz/zoneinfo/America/Detroitbin0 -> 2216 bytes
-rw-r--r--pytz/zoneinfo/America/Dominicabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Edmontonbin0 -> 2402 bytes
-rw-r--r--pytz/zoneinfo/America/Eirunepebin0 -> 684 bytes
-rw-r--r--pytz/zoneinfo/America/El_Salvadorbin0 -> 250 bytes
-rw-r--r--pytz/zoneinfo/America/Ensenadabin0 -> 2356 bytes
-rw-r--r--pytz/zoneinfo/America/Fort_Waynebin0 -> 1675 bytes
-rw-r--r--pytz/zoneinfo/America/Fortalezabin0 -> 728 bytes
-rw-r--r--pytz/zoneinfo/America/Glace_Baybin0 -> 2206 bytes
-rw-r--r--pytz/zoneinfo/America/Godthabbin0 -> 1877 bytes
-rw-r--r--pytz/zoneinfo/America/Goose_Baybin0 -> 3219 bytes
-rw-r--r--pytz/zoneinfo/America/Grand_Turkbin0 -> 1287 bytes
-rw-r--r--pytz/zoneinfo/America/Grenadabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Guadeloupebin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Guatemalabin0 -> 306 bytes
-rw-r--r--pytz/zoneinfo/America/Guayaquilbin0 -> 203 bytes
-rw-r--r--pytz/zoneinfo/America/Guyanabin0 -> 270 bytes
-rw-r--r--pytz/zoneinfo/America/Halifaxbin0 -> 3438 bytes
-rw-r--r--pytz/zoneinfo/America/Havanabin0 -> 2437 bytes
-rw-r--r--pytz/zoneinfo/America/Hermosillobin0 -> 454 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Indianapolisbin0 -> 1675 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Knoxbin0 -> 2437 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Marengobin0 -> 1731 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Petersburgbin0 -> 1913 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Tell_Citybin0 -> 1735 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Vevaybin0 -> 1423 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Vincennesbin0 -> 1703 bytes
-rw-r--r--pytz/zoneinfo/America/Indiana/Winamacbin0 -> 1787 bytes
-rw-r--r--pytz/zoneinfo/America/Indianapolisbin0 -> 1675 bytes
-rw-r--r--pytz/zoneinfo/America/Inuvikbin0 -> 1928 bytes
-rw-r--r--pytz/zoneinfo/America/Iqaluitbin0 -> 2046 bytes
-rw-r--r--pytz/zoneinfo/America/Jamaicabin0 -> 507 bytes
-rw-r--r--pytz/zoneinfo/America/Jujuybin0 -> 1145 bytes
-rw-r--r--pytz/zoneinfo/America/Juneaubin0 -> 2362 bytes
-rw-r--r--pytz/zoneinfo/America/Kentucky/Louisvillebin0 -> 2781 bytes
-rw-r--r--pytz/zoneinfo/America/Kentucky/Monticellobin0 -> 2361 bytes
-rw-r--r--pytz/zoneinfo/America/Knox_INbin0 -> 2437 bytes
-rw-r--r--pytz/zoneinfo/America/Kralendijkbin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/America/La_Pazbin0 -> 243 bytes
-rw-r--r--pytz/zoneinfo/America/Limabin0 -> 417 bytes
-rw-r--r--pytz/zoneinfo/America/Los_Angelesbin0 -> 2845 bytes
-rw-r--r--pytz/zoneinfo/America/Louisvillebin0 -> 2781 bytes
-rw-r--r--pytz/zoneinfo/America/Lower_Princesbin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/America/Maceiobin0 -> 756 bytes
-rw-r--r--pytz/zoneinfo/America/Managuabin0 -> 463 bytes
-rw-r--r--pytz/zoneinfo/America/Manausbin0 -> 616 bytes
-rw-r--r--pytz/zoneinfo/America/Marigotbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Martiniquebin0 -> 257 bytes
-rw-r--r--pytz/zoneinfo/America/Matamorosbin0 -> 1416 bytes
-rw-r--r--pytz/zoneinfo/America/Mazatlanbin0 -> 1564 bytes
-rw-r--r--pytz/zoneinfo/America/Mendozabin0 -> 1173 bytes
-rw-r--r--pytz/zoneinfo/America/Menomineebin0 -> 2283 bytes
-rw-r--r--pytz/zoneinfo/America/Meridabin0 -> 1456 bytes
-rw-r--r--pytz/zoneinfo/America/Metlakatlabin0 -> 716 bytes
-rw-r--r--pytz/zoneinfo/America/Mexico_Citybin0 -> 1618 bytes
-rw-r--r--pytz/zoneinfo/America/Miquelonbin0 -> 1684 bytes
-rw-r--r--pytz/zoneinfo/America/Monctonbin0 -> 3163 bytes
-rw-r--r--pytz/zoneinfo/America/Monterreybin0 -> 1416 bytes
-rw-r--r--pytz/zoneinfo/America/Montevideobin0 -> 2160 bytes
-rw-r--r--pytz/zoneinfo/America/Montrealbin0 -> 3503 bytes
-rw-r--r--pytz/zoneinfo/America/Montserratbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Nassaubin0 -> 2284 bytes
-rw-r--r--pytz/zoneinfo/America/New_Yorkbin0 -> 3545 bytes
-rw-r--r--pytz/zoneinfo/America/Nipigonbin0 -> 2131 bytes
-rw-r--r--pytz/zoneinfo/America/Nomebin0 -> 2376 bytes
-rw-r--r--pytz/zoneinfo/America/Noronhabin0 -> 728 bytes
-rw-r--r--pytz/zoneinfo/America/North_Dakota/Beulahbin0 -> 2389 bytes
-rw-r--r--pytz/zoneinfo/America/North_Dakota/Centerbin0 -> 2389 bytes
-rw-r--r--pytz/zoneinfo/America/North_Dakota/New_Salembin0 -> 2389 bytes
-rw-r--r--pytz/zoneinfo/America/Ojinagabin0 -> 1522 bytes
-rw-r--r--pytz/zoneinfo/America/Panamabin0 -> 203 bytes
-rw-r--r--pytz/zoneinfo/America/Pangnirtungbin0 -> 2108 bytes
-rw-r--r--pytz/zoneinfo/America/Paramaribobin0 -> 308 bytes
-rw-r--r--pytz/zoneinfo/America/Phoenixbin0 -> 353 bytes
-rw-r--r--pytz/zoneinfo/America/Port-au-Princebin0 -> 1483 bytes
-rw-r--r--pytz/zoneinfo/America/Port_of_Spainbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Porto_Acrebin0 -> 656 bytes
-rw-r--r--pytz/zoneinfo/America/Porto_Velhobin0 -> 588 bytes
-rw-r--r--pytz/zoneinfo/America/Puerto_Ricobin0 -> 255 bytes
-rw-r--r--pytz/zoneinfo/America/Rainy_Riverbin0 -> 2131 bytes
-rw-r--r--pytz/zoneinfo/America/Rankin_Inletbin0 -> 1930 bytes
-rw-r--r--pytz/zoneinfo/America/Recifebin0 -> 728 bytes
-rw-r--r--pytz/zoneinfo/America/Reginabin0 -> 994 bytes
-rw-r--r--pytz/zoneinfo/America/Resolutebin0 -> 1930 bytes
-rw-r--r--pytz/zoneinfo/America/Rio_Brancobin0 -> 656 bytes
-rw-r--r--pytz/zoneinfo/America/Rosariobin0 -> 1129 bytes
-rw-r--r--pytz/zoneinfo/America/Santa_Isabelbin0 -> 2356 bytes
-rw-r--r--pytz/zoneinfo/America/Santarembin0 -> 626 bytes
-rw-r--r--pytz/zoneinfo/America/Santiagobin0 -> 2531 bytes
-rw-r--r--pytz/zoneinfo/America/Santo_Domingobin0 -> 489 bytes
-rw-r--r--pytz/zoneinfo/America/Sao_Paulobin0 -> 2015 bytes
-rw-r--r--pytz/zoneinfo/America/Scoresbysundbin0 -> 1925 bytes
-rw-r--r--pytz/zoneinfo/America/Shiprockbin0 -> 2453 bytes
-rw-r--r--pytz/zoneinfo/America/Sitkabin0 -> 2350 bytes
-rw-r--r--pytz/zoneinfo/America/St_Barthelemybin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/St_Johnsbin0 -> 3664 bytes
-rw-r--r--pytz/zoneinfo/America/St_Kittsbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/St_Luciabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/St_Thomasbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/St_Vincentbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Swift_Currentbin0 -> 574 bytes
-rw-r--r--pytz/zoneinfo/America/Tegucigalpabin0 -> 278 bytes
-rw-r--r--pytz/zoneinfo/America/Thulebin0 -> 1528 bytes
-rw-r--r--pytz/zoneinfo/America/Thunder_Baybin0 -> 2211 bytes
-rw-r--r--pytz/zoneinfo/America/Tijuanabin0 -> 2356 bytes
-rw-r--r--pytz/zoneinfo/America/Torontobin0 -> 3503 bytes
-rw-r--r--pytz/zoneinfo/America/Tortolabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Vancouverbin0 -> 2901 bytes
-rw-r--r--pytz/zoneinfo/America/Virginbin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/America/Whitehorsebin0 -> 2093 bytes
-rw-r--r--pytz/zoneinfo/America/Winnipegbin0 -> 2891 bytes
-rw-r--r--pytz/zoneinfo/America/Yakutatbin0 -> 2314 bytes
-rw-r--r--pytz/zoneinfo/America/Yellowknifebin0 -> 1980 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Caseybin0 -> 272 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Davisbin0 -> 290 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/DumontDUrvillebin0 -> 227 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Macquariebin0 -> 1530 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Mawsonbin0 -> 204 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/McMurdobin0 -> 2460 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Palmerbin0 -> 2054 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Rotherabin0 -> 173 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/South_Polebin0 -> 2460 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Syowabin0 -> 174 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Trollbin0 -> 1161 bytes
-rw-r--r--pytz/zoneinfo/Antarctica/Vostokbin0 -> 174 bytes
-rw-r--r--pytz/zoneinfo/Arctic/Longyearbyenbin0 -> 2251 bytes
-rw-r--r--pytz/zoneinfo/Asia/Adenbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Almatybin0 -> 936 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ammanbin0 -> 1877 bytes
-rw-r--r--pytz/zoneinfo/Asia/Anadyrbin0 -> 1197 bytes
-rw-r--r--pytz/zoneinfo/Asia/Aqtaubin0 -> 1142 bytes
-rw-r--r--pytz/zoneinfo/Asia/Aqtobebin0 -> 1052 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ashgabatbin0 -> 671 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ashkhabadbin0 -> 671 bytes
-rw-r--r--pytz/zoneinfo/Asia/Baghdadbin0 -> 988 bytes
-rw-r--r--pytz/zoneinfo/Asia/Bahrainbin0 -> 209 bytes
-rw-r--r--pytz/zoneinfo/Asia/Bakubin0 -> 1956 bytes
-rw-r--r--pytz/zoneinfo/Asia/Bangkokbin0 -> 204 bytes
-rw-r--r--pytz/zoneinfo/Asia/Beirutbin0 -> 2175 bytes
-rw-r--r--pytz/zoneinfo/Asia/Bishkekbin0 -> 1061 bytes
-rw-r--r--pytz/zoneinfo/Asia/Bruneibin0 -> 201 bytes
-rw-r--r--pytz/zoneinfo/Asia/Calcuttabin0 -> 291 bytes
-rw-r--r--pytz/zoneinfo/Asia/Chitabin0 -> 1236 bytes
-rw-r--r--pytz/zoneinfo/Asia/Choibalsanbin0 -> 904 bytes
-rw-r--r--pytz/zoneinfo/Asia/Chongqingbin0 -> 414 bytes
-rw-r--r--pytz/zoneinfo/Asia/Chungkingbin0 -> 414 bytes
-rw-r--r--pytz/zoneinfo/Asia/Colombobin0 -> 389 bytes
-rw-r--r--pytz/zoneinfo/Asia/Daccabin0 -> 390 bytes
-rw-r--r--pytz/zoneinfo/Asia/Damascusbin0 -> 2320 bytes
-rw-r--r--pytz/zoneinfo/Asia/Dhakabin0 -> 390 bytes
-rw-r--r--pytz/zoneinfo/Asia/Dilibin0 -> 309 bytes
-rw-r--r--pytz/zoneinfo/Asia/Dubaibin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Dushanbebin0 -> 611 bytes
-rw-r--r--pytz/zoneinfo/Asia/Gazabin0 -> 2313 bytes
-rw-r--r--pytz/zoneinfo/Asia/Harbinbin0 -> 414 bytes
-rw-r--r--pytz/zoneinfo/Asia/Hebronbin0 -> 2341 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ho_Chi_Minhbin0 -> 373 bytes
-rw-r--r--pytz/zoneinfo/Asia/Hong_Kongbin0 -> 1189 bytes
-rw-r--r--pytz/zoneinfo/Asia/Hovdbin0 -> 848 bytes
-rw-r--r--pytz/zoneinfo/Asia/Irkutskbin0 -> 1259 bytes
-rw-r--r--pytz/zoneinfo/Asia/Istanbulbin0 -> 2747 bytes
-rw-r--r--pytz/zoneinfo/Asia/Jakartabin0 -> 370 bytes
-rw-r--r--pytz/zoneinfo/Asia/Jayapurabin0 -> 241 bytes
-rw-r--r--pytz/zoneinfo/Asia/Jerusalembin0 -> 2265 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kabulbin0 -> 199 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kamchatkabin0 -> 1181 bytes
-rw-r--r--pytz/zoneinfo/Asia/Karachibin0 -> 403 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kashgarbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kathmandubin0 -> 212 bytes
-rw-r--r--pytz/zoneinfo/Asia/Katmandubin0 -> 212 bytes
-rw-r--r--pytz/zoneinfo/Asia/Khandygabin0 -> 1324 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kolkatabin0 -> 291 bytes
-rw-r--r--pytz/zoneinfo/Asia/Krasnoyarskbin0 -> 1226 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kuala_Lumpurbin0 -> 398 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kuchingbin0 -> 519 bytes
-rw-r--r--pytz/zoneinfo/Asia/Kuwaitbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Macaobin0 -> 795 bytes
-rw-r--r--pytz/zoneinfo/Asia/Macaubin0 -> 795 bytes
-rw-r--r--pytz/zoneinfo/Asia/Magadanbin0 -> 1227 bytes
-rw-r--r--pytz/zoneinfo/Asia/Makassarbin0 -> 280 bytes
-rw-r--r--pytz/zoneinfo/Asia/Manilabin0 -> 361 bytes
-rw-r--r--pytz/zoneinfo/Asia/Muscatbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Nicosiabin0 -> 2016 bytes
-rw-r--r--pytz/zoneinfo/Asia/Novokuznetskbin0 -> 1248 bytes
-rw-r--r--pytz/zoneinfo/Asia/Novosibirskbin0 -> 1208 bytes
-rw-r--r--pytz/zoneinfo/Asia/Omskbin0 -> 1226 bytes
-rw-r--r--pytz/zoneinfo/Asia/Oralbin0 -> 1100 bytes
-rw-r--r--pytz/zoneinfo/Asia/Phnom_Penhbin0 -> 204 bytes
-rw-r--r--pytz/zoneinfo/Asia/Pontianakbin0 -> 375 bytes
-rw-r--r--pytz/zoneinfo/Asia/Pyongyangbin0 -> 279 bytes
-rw-r--r--pytz/zoneinfo/Asia/Qatarbin0 -> 209 bytes
-rw-r--r--pytz/zoneinfo/Asia/Qyzylordabin0 -> 1082 bytes
-rw-r--r--pytz/zoneinfo/Asia/Rangoonbin0 -> 285 bytes
-rw-r--r--pytz/zoneinfo/Asia/Riyadhbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Saigonbin0 -> 373 bytes
-rw-r--r--pytz/zoneinfo/Asia/Sakhalinbin0 -> 1227 bytes
-rw-r--r--pytz/zoneinfo/Asia/Samarkandbin0 -> 691 bytes
-rw-r--r--pytz/zoneinfo/Asia/Seoulbin0 -> 571 bytes
-rw-r--r--pytz/zoneinfo/Asia/Shanghaibin0 -> 414 bytes
-rw-r--r--pytz/zoneinfo/Asia/Singaporebin0 -> 428 bytes
-rw-r--r--pytz/zoneinfo/Asia/Srednekolymskbin0 -> 1237 bytes
-rw-r--r--pytz/zoneinfo/Asia/Taipeibin0 -> 800 bytes
-rw-r--r--pytz/zoneinfo/Asia/Tashkentbin0 -> 681 bytes
-rw-r--r--pytz/zoneinfo/Asia/Tbilisibin0 -> 1142 bytes
-rw-r--r--pytz/zoneinfo/Asia/Tehranbin0 -> 1661 bytes
-rw-r--r--pytz/zoneinfo/Asia/Tel_Avivbin0 -> 2265 bytes
-rw-r--r--pytz/zoneinfo/Asia/Thimbubin0 -> 209 bytes
-rw-r--r--pytz/zoneinfo/Asia/Thimphubin0 -> 209 bytes
-rw-r--r--pytz/zoneinfo/Asia/Tokyobin0 -> 355 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ujung_Pandangbin0 -> 280 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ulaanbaatarbin0 -> 848 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ulan_Batorbin0 -> 848 bytes
-rw-r--r--pytz/zoneinfo/Asia/Urumqibin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Asia/Ust-Nerabin0 -> 1293 bytes
-rw-r--r--pytz/zoneinfo/Asia/Vientianebin0 -> 204 bytes
-rw-r--r--pytz/zoneinfo/Asia/Vladivostokbin0 -> 1227 bytes
-rw-r--r--pytz/zoneinfo/Asia/Yakutskbin0 -> 1226 bytes
-rw-r--r--pytz/zoneinfo/Asia/Yekaterinburgbin0 -> 1334 bytes
-rw-r--r--pytz/zoneinfo/Asia/Yerevanbin0 -> 1277 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Azoresbin0 -> 3488 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Bermudabin0 -> 2004 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Canarybin0 -> 1913 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Cape_Verdebin0 -> 254 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Faeroebin0 -> 1829 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Faroebin0 -> 1829 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Jan_Mayenbin0 -> 2251 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Madeirabin0 -> 3478 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Reykjavikbin0 -> 1167 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/South_Georgiabin0 -> 148 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/St_Helenabin0 -> 170 bytes
-rw-r--r--pytz/zoneinfo/Atlantic/Stanleybin0 -> 1246 bytes
-rw-r--r--pytz/zoneinfo/Australia/ACTbin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Adelaidebin0 -> 2238 bytes
-rw-r--r--pytz/zoneinfo/Australia/Brisbanebin0 -> 452 bytes
-rw-r--r--pytz/zoneinfo/Australia/Broken_Hillbin0 -> 2274 bytes
-rw-r--r--pytz/zoneinfo/Australia/Canberrabin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Curriebin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Darwinbin0 -> 323 bytes
-rw-r--r--pytz/zoneinfo/Australia/Euclabin0 -> 487 bytes
-rw-r--r--pytz/zoneinfo/Australia/Hobartbin0 -> 2335 bytes
-rw-r--r--pytz/zoneinfo/Australia/LHIbin0 -> 1859 bytes
-rw-r--r--pytz/zoneinfo/Australia/Lindemanbin0 -> 522 bytes
-rw-r--r--pytz/zoneinfo/Australia/Lord_Howebin0 -> 1859 bytes
-rw-r--r--pytz/zoneinfo/Australia/Melbournebin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/NSWbin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Northbin0 -> 323 bytes
-rw-r--r--pytz/zoneinfo/Australia/Perthbin0 -> 479 bytes
-rw-r--r--pytz/zoneinfo/Australia/Queenslandbin0 -> 452 bytes
-rw-r--r--pytz/zoneinfo/Australia/Southbin0 -> 2238 bytes
-rw-r--r--pytz/zoneinfo/Australia/Sydneybin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Tasmaniabin0 -> 2335 bytes
-rw-r--r--pytz/zoneinfo/Australia/Victoriabin0 -> 2223 bytes
-rw-r--r--pytz/zoneinfo/Australia/Westbin0 -> 479 bytes
-rw-r--r--pytz/zoneinfo/Australia/Yancowinnabin0 -> 2274 bytes
-rw-r--r--pytz/zoneinfo/Brazil/Acrebin0 -> 656 bytes
-rw-r--r--pytz/zoneinfo/Brazil/DeNoronhabin0 -> 728 bytes
-rw-r--r--pytz/zoneinfo/Brazil/Eastbin0 -> 2015 bytes
-rw-r--r--pytz/zoneinfo/Brazil/Westbin0 -> 616 bytes
-rw-r--r--pytz/zoneinfo/CETbin0 -> 2102 bytes
-rw-r--r--pytz/zoneinfo/CST6CDTbin0 -> 2294 bytes
-rw-r--r--pytz/zoneinfo/Canada/Atlanticbin0 -> 3438 bytes
-rw-r--r--pytz/zoneinfo/Canada/Centralbin0 -> 2891 bytes
-rw-r--r--pytz/zoneinfo/Canada/East-Saskatchewanbin0 -> 994 bytes
-rw-r--r--pytz/zoneinfo/Canada/Easternbin0 -> 3503 bytes
-rw-r--r--pytz/zoneinfo/Canada/Mountainbin0 -> 2402 bytes
-rw-r--r--pytz/zoneinfo/Canada/Newfoundlandbin0 -> 3664 bytes
-rw-r--r--pytz/zoneinfo/Canada/Pacificbin0 -> 2901 bytes
-rw-r--r--pytz/zoneinfo/Canada/Saskatchewanbin0 -> 994 bytes
-rw-r--r--pytz/zoneinfo/Canada/Yukonbin0 -> 2093 bytes
-rw-r--r--pytz/zoneinfo/Chile/Continentalbin0 -> 2531 bytes
-rw-r--r--pytz/zoneinfo/Chile/EasterIslandbin0 -> 2295 bytes
-rw-r--r--pytz/zoneinfo/Cubabin0 -> 2437 bytes
-rw-r--r--pytz/zoneinfo/EETbin0 -> 1876 bytes
-rw-r--r--pytz/zoneinfo/ESTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/EST5EDTbin0 -> 2294 bytes
-rw-r--r--pytz/zoneinfo/Egyptbin0 -> 2779 bytes
-rw-r--r--pytz/zoneinfo/Eirebin0 -> 3559 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+1bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+10bin0 -> 139 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+11bin0 -> 139 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+12bin0 -> 139 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+2bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+3bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+4bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+5bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+6bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+7bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+8bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT+9bin0 -> 135 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-1bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-10bin0 -> 140 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-11bin0 -> 140 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-12bin0 -> 140 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-13bin0 -> 140 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-14bin0 -> 140 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-2bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-3bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-4bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-5bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-6bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-7bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-8bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT-9bin0 -> 136 bytes
-rw-r--r--pytz/zoneinfo/Etc/GMT0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/Greenwichbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/UCTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/UTCbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/Universalbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Etc/Zulubin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Europe/Amsterdambin0 -> 2943 bytes
-rw-r--r--pytz/zoneinfo/Europe/Andorrabin0 -> 1751 bytes
-rw-r--r--pytz/zoneinfo/Europe/Athensbin0 -> 2271 bytes
-rw-r--r--pytz/zoneinfo/Europe/Belfastbin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/Europe/Belgradebin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Berlinbin0 -> 2335 bytes
-rw-r--r--pytz/zoneinfo/Europe/Bratislavabin0 -> 2272 bytes
-rw-r--r--pytz/zoneinfo/Europe/Brusselsbin0 -> 2970 bytes
-rw-r--r--pytz/zoneinfo/Europe/Bucharestbin0 -> 2221 bytes
-rw-r--r--pytz/zoneinfo/Europe/Budapestbin0 -> 2405 bytes
-rw-r--r--pytz/zoneinfo/Europe/Busingenbin0 -> 1918 bytes
-rw-r--r--pytz/zoneinfo/Europe/Chisinaubin0 -> 2433 bytes
-rw-r--r--pytz/zoneinfo/Europe/Copenhagenbin0 -> 2160 bytes
-rw-r--r--pytz/zoneinfo/Europe/Dublinbin0 -> 3559 bytes
-rw-r--r--pytz/zoneinfo/Europe/Gibraltarbin0 -> 3061 bytes
-rw-r--r--pytz/zoneinfo/Europe/Guernseybin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/Europe/Helsinkibin0 -> 1909 bytes
-rw-r--r--pytz/zoneinfo/Europe/Isle_of_Manbin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/Europe/Istanbulbin0 -> 2747 bytes
-rw-r--r--pytz/zoneinfo/Europe/Jerseybin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/Europe/Kaliningradbin0 -> 1550 bytes
-rw-r--r--pytz/zoneinfo/Europe/Kievbin0 -> 2097 bytes
-rw-r--r--pytz/zoneinfo/Europe/Lisbonbin0 -> 3453 bytes
-rw-r--r--pytz/zoneinfo/Europe/Ljubljanabin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Londonbin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/Europe/Luxembourgbin0 -> 2974 bytes
-rw-r--r--pytz/zoneinfo/Europe/Madridbin0 -> 2619 bytes
-rw-r--r--pytz/zoneinfo/Europe/Maltabin0 -> 2629 bytes
-rw-r--r--pytz/zoneinfo/Europe/Mariehamnbin0 -> 1909 bytes
-rw-r--r--pytz/zoneinfo/Europe/Minskbin0 -> 1368 bytes
-rw-r--r--pytz/zoneinfo/Europe/Monacobin0 -> 2953 bytes
-rw-r--r--pytz/zoneinfo/Europe/Moscowbin0 -> 1528 bytes
-rw-r--r--pytz/zoneinfo/Europe/Nicosiabin0 -> 2016 bytes
-rw-r--r--pytz/zoneinfo/Europe/Oslobin0 -> 2251 bytes
-rw-r--r--pytz/zoneinfo/Europe/Parisbin0 -> 2971 bytes
-rw-r--r--pytz/zoneinfo/Europe/Podgoricabin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Praguebin0 -> 2272 bytes
-rw-r--r--pytz/zoneinfo/Europe/Rigabin0 -> 2235 bytes
-rw-r--r--pytz/zoneinfo/Europe/Romebin0 -> 2678 bytes
-rw-r--r--pytz/zoneinfo/Europe/Samarabin0 -> 1394 bytes
-rw-r--r--pytz/zoneinfo/Europe/San_Marinobin0 -> 2678 bytes
-rw-r--r--pytz/zoneinfo/Europe/Sarajevobin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Simferopolbin0 -> 1504 bytes
-rw-r--r--pytz/zoneinfo/Europe/Skopjebin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Sofiabin0 -> 2130 bytes
-rw-r--r--pytz/zoneinfo/Europe/Stockholmbin0 -> 1918 bytes
-rw-r--r--pytz/zoneinfo/Europe/Tallinnbin0 -> 2201 bytes
-rw-r--r--pytz/zoneinfo/Europe/Tiranebin0 -> 2098 bytes
-rw-r--r--pytz/zoneinfo/Europe/Tiraspolbin0 -> 2433 bytes
-rw-r--r--pytz/zoneinfo/Europe/Uzhgorodbin0 -> 2103 bytes
-rw-r--r--pytz/zoneinfo/Europe/Vaduzbin0 -> 1918 bytes
-rw-r--r--pytz/zoneinfo/Europe/Vaticanbin0 -> 2678 bytes
-rw-r--r--pytz/zoneinfo/Europe/Viennabin0 -> 2237 bytes
-rw-r--r--pytz/zoneinfo/Europe/Vilniusbin0 -> 2199 bytes
-rw-r--r--pytz/zoneinfo/Europe/Volgogradbin0 -> 1317 bytes
-rw-r--r--pytz/zoneinfo/Europe/Warsawbin0 -> 2705 bytes
-rw-r--r--pytz/zoneinfo/Europe/Zagrebbin0 -> 1957 bytes
-rw-r--r--pytz/zoneinfo/Europe/Zaporozhyebin0 -> 2111 bytes
-rw-r--r--pytz/zoneinfo/Europe/Zurichbin0 -> 1918 bytes
-rw-r--r--pytz/zoneinfo/Factorybin0 -> 264 bytes
-rw-r--r--pytz/zoneinfo/GBbin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/GB-Eirebin0 -> 3687 bytes
-rw-r--r--pytz/zoneinfo/GMTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/GMT+0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/GMT-0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/GMT0bin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Greenwichbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/HSTbin0 -> 128 bytes
-rw-r--r--pytz/zoneinfo/Hongkongbin0 -> 1189 bytes
-rw-r--r--pytz/zoneinfo/Icelandbin0 -> 1167 bytes
-rw-r--r--pytz/zoneinfo/Indian/Antananarivobin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Indian/Chagosbin0 -> 201 bytes
-rw-r--r--pytz/zoneinfo/Indian/Christmasbin0 -> 149 bytes
-rw-r--r--pytz/zoneinfo/Indian/Cocosbin0 -> 152 bytes
-rw-r--r--pytz/zoneinfo/Indian/Comorobin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Indian/Kerguelenbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Indian/Mahebin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Indian/Maldivesbin0 -> 204 bytes
-rw-r--r--pytz/zoneinfo/Indian/Mauritiusbin0 -> 253 bytes
-rw-r--r--pytz/zoneinfo/Indian/Mayottebin0 -> 283 bytes
-rw-r--r--pytz/zoneinfo/Indian/Reunionbin0 -> 171 bytes
-rw-r--r--pytz/zoneinfo/Iranbin0 -> 1661 bytes
-rw-r--r--pytz/zoneinfo/Israelbin0 -> 2265 bytes
-rw-r--r--pytz/zoneinfo/Jamaicabin0 -> 507 bytes
-rw-r--r--pytz/zoneinfo/Japanbin0 -> 355 bytes
-rw-r--r--pytz/zoneinfo/Kwajaleinbin0 -> 237 bytes
-rw-r--r--pytz/zoneinfo/Libyabin0 -> 655 bytes
-rw-r--r--pytz/zoneinfo/METbin0 -> 2102 bytes
-rw-r--r--pytz/zoneinfo/MSTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/MST7MDTbin0 -> 2294 bytes
-rw-r--r--pytz/zoneinfo/Mexico/BajaNortebin0 -> 2356 bytes
-rw-r--r--pytz/zoneinfo/Mexico/BajaSurbin0 -> 1564 bytes
-rw-r--r--pytz/zoneinfo/Mexico/Generalbin0 -> 1618 bytes
-rw-r--r--pytz/zoneinfo/NZbin0 -> 2460 bytes
-rw-r--r--pytz/zoneinfo/NZ-CHATbin0 -> 2057 bytes
-rw-r--r--pytz/zoneinfo/Navajobin0 -> 2453 bytes
-rw-r--r--pytz/zoneinfo/PRCbin0 -> 414 bytes
-rw-r--r--pytz/zoneinfo/PST8PDTbin0 -> 2294 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Apiabin0 -> 1102 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Aucklandbin0 -> 2460 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Bougainvillebin0 -> 280 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Chathambin0 -> 2057 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Chuukbin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Easterbin0 -> 2295 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Efatebin0 -> 478 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Enderburybin0 -> 230 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Fakaofobin0 -> 197 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Fijibin0 -> 1074 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Funafutibin0 -> 150 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Galapagosbin0 -> 211 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Gambierbin0 -> 173 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Guadalcanalbin0 -> 172 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Guambin0 -> 225 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Honolulubin0 -> 276 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Johnstonbin0 -> 276 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Kiritimatibin0 -> 230 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Kosraebin0 -> 230 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Kwajaleinbin0 -> 237 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Majurobin0 -> 197 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Marquesasbin0 -> 176 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Midwaybin0 -> 294 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Naurubin0 -> 254 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Niuebin0 -> 226 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Norfolkbin0 -> 208 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Noumeabin0 -> 314 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Pago_Pagobin0 -> 272 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Palaubin0 -> 149 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Pitcairnbin0 -> 203 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Pohnpeibin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Ponapebin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Port_Moresbybin0 -> 172 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Rarotongabin0 -> 574 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Saipanbin0 -> 255 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Samoabin0 -> 272 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Tahitibin0 -> 174 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Tarawabin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Tongatapubin0 -> 339 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Trukbin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Wakebin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Wallisbin0 -> 150 bytes
-rw-r--r--pytz/zoneinfo/Pacific/Yapbin0 -> 153 bytes
-rw-r--r--pytz/zoneinfo/Polandbin0 -> 2705 bytes
-rw-r--r--pytz/zoneinfo/Portugalbin0 -> 3453 bytes
-rw-r--r--pytz/zoneinfo/ROCbin0 -> 800 bytes
-rw-r--r--pytz/zoneinfo/ROKbin0 -> 571 bytes
-rw-r--r--pytz/zoneinfo/Singaporebin0 -> 428 bytes
-rw-r--r--pytz/zoneinfo/Turkeybin0 -> 2747 bytes
-rw-r--r--pytz/zoneinfo/UCTbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/US/Alaskabin0 -> 2384 bytes
-rw-r--r--pytz/zoneinfo/US/Aleutianbin0 -> 2379 bytes
-rw-r--r--pytz/zoneinfo/US/Arizonabin0 -> 353 bytes
-rw-r--r--pytz/zoneinfo/US/Centralbin0 -> 3585 bytes
-rw-r--r--pytz/zoneinfo/US/East-Indianabin0 -> 1675 bytes
-rw-r--r--pytz/zoneinfo/US/Easternbin0 -> 3545 bytes
-rw-r--r--pytz/zoneinfo/US/Hawaiibin0 -> 276 bytes
-rw-r--r--pytz/zoneinfo/US/Indiana-Starkebin0 -> 2437 bytes
-rw-r--r--pytz/zoneinfo/US/Michiganbin0 -> 2216 bytes
-rw-r--r--pytz/zoneinfo/US/Mountainbin0 -> 2453 bytes
-rw-r--r--pytz/zoneinfo/US/Pacificbin0 -> 2845 bytes
-rw-r--r--pytz/zoneinfo/US/Pacific-Newbin0 -> 2845 bytes
-rw-r--r--pytz/zoneinfo/US/Samoabin0 -> 272 bytes
-rw-r--r--pytz/zoneinfo/UTCbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/Universalbin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/W-SUbin0 -> 1528 bytes
-rw-r--r--pytz/zoneinfo/WETbin0 -> 1873 bytes
-rw-r--r--pytz/zoneinfo/Zulubin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/iso3166.tab275
-rw-r--r--pytz/zoneinfo/localtimebin0 -> 127 bytes
-rw-r--r--pytz/zoneinfo/posixrulesbin0 -> 3545 bytes
-rw-r--r--pytz/zoneinfo/zone.tab440
-rw-r--r--pytz/zoneinfo/zone1970.tab371
-rw-r--r--setup.cfg5
-rw-r--r--setup.py52
609 files changed, 7337 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 0000000..7cb8b1b
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,54 @@
+2004-07-25
+
+ - Improved localtime handling, and added a localize() method enabling
+ correct creation of local times.
+
+2005-02-16
+
+ - Made available under the Zope Public Licence 2.1 (ZPL) and checked
+ into the Zope3 project. pytz may now be used and redistributed
+ under either the original MIT license or the ZPL 2.1.
+
+2005-05-13
+
+ - Move UTC into the top level pytz module and provide special
+ case pickle support for this singleton.
+
+2005-08-14
+
+ - Ensure all tzinfo instances are efficiently picklable.
+
+2005-12-31
+
+ - Add fixed offset timezone classes required by Zope 3
+ - Generate and distribute a PO template file listing all timezone
+ names. Translations are not yet available.
+
+2007-03-03
+
+ - Import work by James Henstridge, making pytz load timezone
+ information from zic compiled binaries at runtime rather than
+ processing them into Python classes.
+
+2007-03-26
+
+ - Update database to version 2007d
+ - Fix windows incompatibilities, working around limitations on that
+ platform.
+ - Fix 2.3 incompatibilities. Installation now requires distutils.
+ - Passing an invalid timezone name to timezone() now raises an
+ UnknownTimezoneError, which is a KeyError subclass for backwards
+ compatibility.
+
+2007-03-27
+
+ - Ensure API can accept Unicode strings (Bug #96957)
+
+2009-09-29
+
+ - Fix test_zdump tests and bugs the fixed tests picked up, including
+ the fix for Bug #427444.
+
+2011-02-08
+
+ - Python 3.1 support.
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..5e12fcc
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2003-2009 Stuart Bishop <stuart@stuartbishop.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..fda34e2
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,5 @@
+include *.txt setup.py
+recursive-include pytz *.py
+#recursive-include pytz *.pot
+graft pytz/zoneinfo
+#exclude test_zdump.py
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..5577abd
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,595 @@
+Metadata-Version: 1.1
+Name: pytz
+Version: 2014.10
+Summary: World timezone definitions, modern and historical
+Home-page: http://pythonhosted.org/pytz
+Author: Stuart Bishop
+Author-email: stuart@stuartbishop.net
+License: MIT
+Download-URL: http://pypi.python.org/pypi/pytz
+Description: pytz - World Timezone Definitions for Python
+ ============================================
+
+ :Author: Stuart Bishop <stuart@stuartbishop.net>
+
+ Introduction
+ ~~~~~~~~~~~~
+
+ pytz brings the Olson tz database into Python. This library allows
+ accurate and cross platform timezone calculations using Python 2.4
+ or higher. It also solves the issue of ambiguous times at the end
+ of daylight saving time, which you can read more about in the Python
+ Library Reference (``datetime.tzinfo``).
+
+ Almost all of the Olson timezones are supported.
+
+ .. note::
+
+ This library differs from the documented Python API for
+ tzinfo implementations; if you want to create local wallclock
+ times you need to use the ``localize()`` method documented in this
+ document. In addition, if you perform date arithmetic on local
+ times that cross DST boundaries, the result may be in an incorrect
+ timezone (ie. subtract 1 minute from 2002-10-27 1:00 EST and you get
+ 2002-10-27 0:59 EST instead of the correct 2002-10-27 1:59 EDT). A
+ ``normalize()`` method is provided to correct this. Unfortunately these
+ issues cannot be resolved without modifying the Python datetime
+ implementation (see PEP-431).
+
+
+ Installation
+ ~~~~~~~~~~~~
+
+ This package can either be installed from a .egg file using setuptools,
+ or from the tarball using the standard Python distutils.
+
+ If you are installing from a tarball, run the following command as an
+ administrative user::
+
+ python setup.py install
+
+ If you are installing using setuptools, you don't even need to download
+ anything as the latest version will be downloaded for you
+ from the Python package index::
+
+ easy_install --upgrade pytz
+
+ If you already have the .egg file, you can use that too::
+
+ easy_install pytz-2008g-py2.6.egg
+
+
+ Example & Usage
+ ~~~~~~~~~~~~~~~
+
+ Localized times and date arithmetic
+ -----------------------------------
+
+ >>> from datetime import datetime, timedelta
+ >>> from pytz import timezone
+ >>> import pytz
+ >>> utc = pytz.utc
+ >>> utc.zone
+ 'UTC'
+ >>> eastern = timezone('US/Eastern')
+ >>> eastern.zone
+ 'US/Eastern'
+ >>> amsterdam = timezone('Europe/Amsterdam')
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+
+ This library only supports two ways of building a localized time. The
+ first is to use the ``localize()`` method provided by the pytz library.
+ This is used to localize a naive datetime (datetime with no timezone
+ information):
+
+ >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
+ >>> print(loc_dt.strftime(fmt))
+ 2002-10-27 06:00:00 EST-0500
+
+ The second way of building a localized time is by converting an existing
+ localized time using the standard ``astimezone()`` method:
+
+ >>> ams_dt = loc_dt.astimezone(amsterdam)
+ >>> ams_dt.strftime(fmt)
+ '2002-10-27 12:00:00 CET+0100'
+
+ Unfortunately using the tzinfo argument of the standard datetime
+ constructors ''does not work'' with pytz for many timezones.
+
+ >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
+ '2002-10-27 12:00:00 LMT+0020'
+
+ It is safe for timezones without daylight saving transitions though, such
+ as UTC:
+
+ >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
+ '2002-10-27 12:00:00 UTC+0000'
+
+ The preferred way of dealing with times is to always work in UTC,
+ converting to localtime only when generating output to be read
+ by humans.
+
+ >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
+ >>> loc_dt = utc_dt.astimezone(eastern)
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:00:00 EST-0500'
+
+ This library also allows you to do date arithmetic using local
+ times, although it is more complicated than working in UTC as you
+ need to use the ``normalize()`` method to handle daylight saving time
+ and other timezone transitions. In this example, ``loc_dt`` is set
+ to the instant when daylight saving time ends in the US/Eastern
+ timezone.
+
+ >>> before = loc_dt - timedelta(minutes=10)
+ >>> before.strftime(fmt)
+ '2002-10-27 00:50:00 EST-0500'
+ >>> eastern.normalize(before).strftime(fmt)
+ '2002-10-27 01:50:00 EDT-0400'
+ >>> after = eastern.normalize(before + timedelta(minutes=20))
+ >>> after.strftime(fmt)
+ '2002-10-27 01:10:00 EST-0500'
+
+ Creating local times is also tricky, and the reason why working with
+ local times is not recommended. Unfortunately, you cannot just pass
+ a ``tzinfo`` argument when constructing a datetime (see the next
+ section for more details)
+
+ >>> dt = datetime(2002, 10, 27, 1, 30, 0)
+ >>> dt1 = eastern.localize(dt, is_dst=True)
+ >>> dt1.strftime(fmt)
+ '2002-10-27 01:30:00 EDT-0400'
+ >>> dt2 = eastern.localize(dt, is_dst=False)
+ >>> dt2.strftime(fmt)
+ '2002-10-27 01:30:00 EST-0500'
+
+ Converting between timezones also needs special attention. We also need
+ to use the ``normalize()`` method to ensure the conversion is correct.
+
+ >>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
+ >>> utc_dt.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+ >>> au_tz = timezone('Australia/Sydney')
+ >>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+ >>> au_dt.strftime(fmt)
+ '2006-03-27 08:34:59 AEDT+1100'
+ >>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
+ >>> utc_dt2.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+
+ You can take shortcuts when dealing with the UTC side of timezone
+ conversions. ``normalize()`` and ``localize()`` are not really
+ necessary when there are no daylight saving time transitions to
+ deal with.
+
+ >>> utc_dt = datetime.utcfromtimestamp(1143408899).replace(tzinfo=utc)
+ >>> utc_dt.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+ >>> au_tz = timezone('Australia/Sydney')
+ >>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+ >>> au_dt.strftime(fmt)
+ '2006-03-27 08:34:59 AEDT+1100'
+ >>> utc_dt2 = au_dt.astimezone(utc)
+ >>> utc_dt2.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+
+
+ ``tzinfo`` API
+ --------------
+
+ The ``tzinfo`` instances returned by the ``timezone()`` function have
+ been extended to cope with ambiguous times by adding an ``is_dst``
+ parameter to the ``utcoffset()``, ``dst()`` && ``tzname()`` methods.
+
+ >>> tz = timezone('America/St_Johns')
+
+ >>> normal = datetime(2009, 9, 1)
+ >>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+ The ``is_dst`` parameter is ignored for most timestamps. It is only used
+ during DST transition ambiguous periods to resulve that ambiguity.
+
+ >>> tz.utcoffset(normal, is_dst=True)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal, is_dst=True)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal, is_dst=True)
+ 'NDT'
+
+ >>> tz.utcoffset(ambiguous, is_dst=True)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(ambiguous, is_dst=True)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(ambiguous, is_dst=True)
+ 'NDT'
+
+ >>> tz.utcoffset(normal, is_dst=False)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal, is_dst=False)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal, is_dst=False)
+ 'NDT'
+
+ >>> tz.utcoffset(ambiguous, is_dst=False)
+ datetime.timedelta(-1, 73800)
+ >>> tz.dst(ambiguous, is_dst=False)
+ datetime.timedelta(0)
+ >>> tz.tzname(ambiguous, is_dst=False)
+ 'NST'
+
+ If ``is_dst`` is not specified, ambiguous timestamps will raise
+ an ``pytz.exceptions.AmbiguousTimeError`` exception.
+
+ >>> tz.utcoffset(normal)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal)
+ 'NDT'
+
+ >>> import pytz.exceptions
+ >>> try:
+ ... tz.utcoffset(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+ >>> try:
+ ... tz.dst(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+ >>> try:
+ ... tz.tzname(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+
+
+ Problems with Localtime
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ The major problem we have to deal with is that certain datetimes
+ may occur twice in a year. For example, in the US/Eastern timezone
+ on the last Sunday morning in October, the following sequence
+ happens:
+
+ - 01:00 EDT occurs
+ - 1 hour later, instead of 2:00am the clock is turned back 1 hour
+ and 01:00 happens again (this time 01:00 EST)
+
+ In fact, every instant between 01:00 and 02:00 occurs twice. This means
+ that if you try and create a time in the 'US/Eastern' timezone
+ the standard datetime syntax, there is no way to specify if you meant
+ before of after the end-of-daylight-saving-time transition. Using the
+ pytz custom syntax, the best you can do is make an educated guess:
+
+ >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 1, 30, 00))
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:30:00 EST-0500'
+
+ As you can see, the system has chosen one for you and there is a 50%
+ chance of it being out by one hour. For some applications, this does
+ not matter. However, if you are trying to schedule meetings with people
+ in different timezones or analyze log files it is not acceptable.
+
+ The best and simplest solution is to stick with using UTC. The pytz
+ package encourages using UTC for internal timezone representation by
+ including a special UTC implementation based on the standard Python
+ reference implementation in the Python documentation.
+
+ The UTC timezone unpickles to be the same instance, and pickles to a
+ smaller size than other pytz tzinfo instances. The UTC implementation
+ can be obtained as pytz.utc, pytz.UTC, or pytz.timezone('UTC').
+
+ >>> import pickle, pytz
+ >>> dt = datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
+ >>> naive = dt.replace(tzinfo=None)
+ >>> p = pickle.dumps(dt, 1)
+ >>> naive_p = pickle.dumps(naive, 1)
+ >>> len(p) - len(naive_p)
+ 17
+ >>> new = pickle.loads(p)
+ >>> new == dt
+ True
+ >>> new is dt
+ False
+ >>> new.tzinfo is dt.tzinfo
+ True
+ >>> pytz.utc is pytz.UTC is pytz.timezone('UTC')
+ True
+
+ Note that some other timezones are commonly thought of as the same (GMT,
+ Greenwich, Universal, etc.). The definition of UTC is distinct from these
+ other timezones, and they are not equivalent. For this reason, they will
+ not compare the same in Python.
+
+ >>> utc == pytz.timezone('GMT')
+ False
+
+ See the section `What is UTC`_, below.
+
+ If you insist on working with local times, this library provides a
+ facility for constructing them unambiguously:
+
+ >>> loc_dt = datetime(2002, 10, 27, 1, 30, 00)
+ >>> est_dt = eastern.localize(loc_dt, is_dst=True)
+ >>> edt_dt = eastern.localize(loc_dt, is_dst=False)
+ >>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt))
+ 2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500
+
+ If you pass None as the is_dst flag to localize(), pytz will refuse to
+ guess and raise exceptions if you try to build ambiguous or non-existent
+ times.
+
+ For example, 1:30am on 27th Oct 2002 happened twice in the US/Eastern
+ timezone when the clocks where put back at the end of Daylight Saving
+ Time:
+
+ >>> dt = datetime(2002, 10, 27, 1, 30, 00)
+ >>> try:
+ ... eastern.localize(dt, is_dst=None)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % dt)
+ pytz.exceptions.AmbiguousTimeError: 2002-10-27 01:30:00
+
+ Similarly, 2:30am on 7th April 2002 never happened at all in the
+ US/Eastern timezone, as the clocks where put forward at 2:00am skipping
+ the entire hour:
+
+ >>> dt = datetime(2002, 4, 7, 2, 30, 00)
+ >>> try:
+ ... eastern.localize(dt, is_dst=None)
+ ... except pytz.exceptions.NonExistentTimeError:
+ ... print('pytz.exceptions.NonExistentTimeError: %s' % dt)
+ pytz.exceptions.NonExistentTimeError: 2002-04-07 02:30:00
+
+ Both of these exceptions share a common base class to make error handling
+ easier:
+
+ >>> isinstance(pytz.AmbiguousTimeError(), pytz.InvalidTimeError)
+ True
+ >>> isinstance(pytz.NonExistentTimeError(), pytz.InvalidTimeError)
+ True
+
+
+ A special case is where countries change their timezone definitions
+ with no daylight savings time switch. For example, in 1915 Warsaw
+ switched from Warsaw time to Central European time with no daylight savings
+ transition. So at the stroke of midnight on August 5th 1915 the clocks
+ were wound back 24 minutes creating an ambiguous time period that cannot
+ be specified without referring to the timezone abbreviation or the
+ actual UTC offset. In this case midnight happened twice, neither time
+ during a daylight saving time period. pytz handles this transition by
+ treating the ambiguous period before the switch as daylight savings
+ time, and the ambiguous period after as standard time.
+
+
+ >>> warsaw = pytz.timezone('Europe/Warsaw')
+ >>> amb_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=True)
+ >>> amb_dt1.strftime(fmt)
+ '1915-08-04 23:59:59 WMT+0124'
+ >>> amb_dt2 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False)
+ >>> amb_dt2.strftime(fmt)
+ '1915-08-04 23:59:59 CET+0100'
+ >>> switch_dt = warsaw.localize(datetime(1915, 8, 5, 00, 00, 00), is_dst=False)
+ >>> switch_dt.strftime(fmt)
+ '1915-08-05 00:00:00 CET+0100'
+ >>> str(switch_dt - amb_dt1)
+ '0:24:01'
+ >>> str(switch_dt - amb_dt2)
+ '0:00:01'
+
+ The best way of creating a time during an ambiguous time period is
+ by converting from another timezone such as UTC:
+
+ >>> utc_dt = datetime(1915, 8, 4, 22, 36, tzinfo=pytz.utc)
+ >>> utc_dt.astimezone(warsaw).strftime(fmt)
+ '1915-08-04 23:36:00 CET+0100'
+
+ The standard Python way of handling all these ambiguities is not to
+ handle them, such as demonstrated in this example using the US/Eastern
+ timezone definition from the Python documentation (Note that this
+ implementation only works for dates between 1987 and 2006 - it is
+ included for tests only!):
+
+ >>> from pytz.reference import Eastern # pytz.reference only for tests
+ >>> dt = datetime(2002, 10, 27, 0, 30, tzinfo=Eastern)
+ >>> str(dt)
+ '2002-10-27 00:30:00-04:00'
+ >>> str(dt + timedelta(hours=1))
+ '2002-10-27 01:30:00-05:00'
+ >>> str(dt + timedelta(hours=2))
+ '2002-10-27 02:30:00-05:00'
+ >>> str(dt + timedelta(hours=3))
+ '2002-10-27 03:30:00-05:00'
+
+ Notice the first two results? At first glance you might think they are
+ correct, but taking the UTC offset into account you find that they are
+ actually two hours appart instead of the 1 hour we asked for.
+
+ >>> from pytz.reference import UTC # pytz.reference only for tests
+ >>> str(dt.astimezone(UTC))
+ '2002-10-27 04:30:00+00:00'
+ >>> str((dt + timedelta(hours=1)).astimezone(UTC))
+ '2002-10-27 06:30:00+00:00'
+
+
+ Country Information
+ ~~~~~~~~~~~~~~~~~~~
+
+ A mechanism is provided to access the timezones commonly in use
+ for a particular country, looked up using the ISO 3166 country code.
+ It returns a list of strings that can be used to retrieve the relevant
+ tzinfo instance using ``pytz.timezone()``:
+
+ >>> print(' '.join(pytz.country_timezones['nz']))
+ Pacific/Auckland Pacific/Chatham
+
+ The Olson database comes with a ISO 3166 country code to English country
+ name mapping that pytz exposes as a dictionary:
+
+ >>> print(pytz.country_names['nz'])
+ New Zealand
+
+
+ What is UTC
+ ~~~~~~~~~~~
+
+ 'UTC' is `Coordinated Universal Time`_. It is a successor to, but distinct
+ from, Greenwich Mean Time (GMT) and the various definitions of Universal
+ Time. UTC is now the worldwide standard for regulating clocks and time
+ measurement.
+
+ All other timezones are defined relative to UTC, and include offsets like
+ UTC+0800 - hours to add or subtract from UTC to derive the local time. No
+ daylight saving time occurs in UTC, making it a useful timezone to perform
+ date arithmetic without worrying about the confusion and ambiguities caused
+ by daylight saving time transitions, your country changing its timezone, or
+ mobile computers that roam through multiple timezones.
+
+ .. _Coordinated Universal Time: https://en.wikipedia.org/wiki/Coordinated_Universal_Time
+
+
+ Helpers
+ ~~~~~~~
+
+ There are two lists of timezones provided.
+
+ ``all_timezones`` is the exhaustive list of the timezone names that can
+ be used.
+
+ >>> from pytz import all_timezones
+ >>> len(all_timezones) >= 500
+ True
+ >>> 'Etc/Greenwich' in all_timezones
+ True
+
+ ``common_timezones`` is a list of useful, current timezones. It doesn't
+ contain deprecated zones or historical zones, except for a few I've
+ deemed in common usage, such as US/Eastern (open a bug report if you
+ think other timezones are deserving of being included here). It is also
+ a sequence of strings.
+
+ >>> from pytz import common_timezones
+ >>> len(common_timezones) < len(all_timezones)
+ True
+ >>> 'Etc/Greenwich' in common_timezones
+ False
+ >>> 'Australia/Melbourne' in common_timezones
+ True
+ >>> 'US/Eastern' in common_timezones
+ True
+ >>> 'Canada/Eastern' in common_timezones
+ True
+ >>> 'US/Pacific-New' in all_timezones
+ True
+ >>> 'US/Pacific-New' in common_timezones
+ False
+
+ Both ``common_timezones`` and ``all_timezones`` are alphabetically
+ sorted:
+
+ >>> common_timezones_dupe = common_timezones[:]
+ >>> common_timezones_dupe.sort()
+ >>> common_timezones == common_timezones_dupe
+ True
+ >>> all_timezones_dupe = all_timezones[:]
+ >>> all_timezones_dupe.sort()
+ >>> all_timezones == all_timezones_dupe
+ True
+
+ ``all_timezones`` and ``common_timezones`` are also available as sets.
+
+ >>> from pytz import all_timezones_set, common_timezones_set
+ >>> 'US/Eastern' in all_timezones_set
+ True
+ >>> 'US/Eastern' in common_timezones_set
+ True
+ >>> 'Australia/Victoria' in common_timezones_set
+ False
+
+ You can also retrieve lists of timezones used by particular countries
+ using the ``country_timezones()`` function. It requires an ISO-3166
+ two letter country code.
+
+ >>> from pytz import country_timezones
+ >>> print(' '.join(country_timezones('ch')))
+ Europe/Zurich
+ >>> print(' '.join(country_timezones('CH')))
+ Europe/Zurich
+
+
+ License
+ ~~~~~~~
+
+ MIT license.
+
+ This code is also available as part of Zope 3 under the Zope Public
+ License, Version 2.1 (ZPL).
+
+ I'm happy to relicense this code if necessary for inclusion in other
+ open source projects.
+
+
+ Latest Versions
+ ~~~~~~~~~~~~~~~
+
+ This package will be updated after releases of the Olson timezone
+ database. The latest version can be downloaded from the `Python Package
+ Index <http://pypi.python.org/pypi/pytz/>`_. The code that is used
+ to generate this distribution is hosted on launchpad.net and available
+ using the `Bazaar version control system <http://bazaar-vcs.org>`_
+ using::
+
+ bzr branch lp:pytz
+
+ Announcements of new releases are made on
+ `Launchpad <https://launchpad.net/pytz>`_, and the
+ `Atom feed <http://feeds.launchpad.net/pytz/announcements.atom>`_
+ hosted there.
+
+
+ Bugs, Feature Requests & Patches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bugs can be reported using `Launchpad <https://bugs.launchpad.net/pytz>`_.
+
+
+ Issues & Limitations
+ ~~~~~~~~~~~~~~~~~~~~
+
+ - Offsets from UTC are rounded to the nearest whole minute, so timezones
+ such as Europe/Amsterdam pre 1937 will be up to 30 seconds out. This
+ is a limitation of the Python datetime library.
+
+ - If you think a timezone definition is incorrect, I probably can't fix
+ it. pytz is a direct translation of the Olson timezone database, and
+ changes to the timezone definitions need to be made to this source.
+ If you find errors they should be reported to the time zone mailing
+ list, linked from http://www.iana.org/time-zones.
+
+
+ Further Reading
+ ~~~~~~~~~~~~~~~
+
+ More info than you want to know about timezones:
+ http://www.twinsun.com/tz/tz-link.htm
+
+
+ Contact
+ ~~~~~~~
+
+ Stuart Bishop <stuart@stuartbishop.net>
+
+
+
+Keywords: timezone,tzinfo,datetime,olson,time
+Platform: Independant
+Classifier: Development Status :: 6 - Mature
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Natural Language :: English
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..8b21696
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,575 @@
+pytz - World Timezone Definitions for Python
+============================================
+
+:Author: Stuart Bishop <stuart@stuartbishop.net>
+
+Introduction
+~~~~~~~~~~~~
+
+pytz brings the Olson tz database into Python. This library allows
+accurate and cross platform timezone calculations using Python 2.4
+or higher. It also solves the issue of ambiguous times at the end
+of daylight saving time, which you can read more about in the Python
+Library Reference (``datetime.tzinfo``).
+
+Almost all of the Olson timezones are supported.
+
+.. note::
+
+ This library differs from the documented Python API for
+ tzinfo implementations; if you want to create local wallclock
+ times you need to use the ``localize()`` method documented in this
+ document. In addition, if you perform date arithmetic on local
+ times that cross DST boundaries, the result may be in an incorrect
+ timezone (ie. subtract 1 minute from 2002-10-27 1:00 EST and you get
+ 2002-10-27 0:59 EST instead of the correct 2002-10-27 1:59 EDT). A
+ ``normalize()`` method is provided to correct this. Unfortunately these
+ issues cannot be resolved without modifying the Python datetime
+ implementation (see PEP-431).
+
+
+Installation
+~~~~~~~~~~~~
+
+This package can either be installed from a .egg file using setuptools,
+or from the tarball using the standard Python distutils.
+
+If you are installing from a tarball, run the following command as an
+administrative user::
+
+ python setup.py install
+
+If you are installing using setuptools, you don't even need to download
+anything as the latest version will be downloaded for you
+from the Python package index::
+
+ easy_install --upgrade pytz
+
+If you already have the .egg file, you can use that too::
+
+ easy_install pytz-2008g-py2.6.egg
+
+
+Example & Usage
+~~~~~~~~~~~~~~~
+
+Localized times and date arithmetic
+-----------------------------------
+
+>>> from datetime import datetime, timedelta
+>>> from pytz import timezone
+>>> import pytz
+>>> utc = pytz.utc
+>>> utc.zone
+'UTC'
+>>> eastern = timezone('US/Eastern')
+>>> eastern.zone
+'US/Eastern'
+>>> amsterdam = timezone('Europe/Amsterdam')
+>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+
+This library only supports two ways of building a localized time. The
+first is to use the ``localize()`` method provided by the pytz library.
+This is used to localize a naive datetime (datetime with no timezone
+information):
+
+>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
+>>> print(loc_dt.strftime(fmt))
+2002-10-27 06:00:00 EST-0500
+
+The second way of building a localized time is by converting an existing
+localized time using the standard ``astimezone()`` method:
+
+>>> ams_dt = loc_dt.astimezone(amsterdam)
+>>> ams_dt.strftime(fmt)
+'2002-10-27 12:00:00 CET+0100'
+
+Unfortunately using the tzinfo argument of the standard datetime
+constructors ''does not work'' with pytz for many timezones.
+
+>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
+'2002-10-27 12:00:00 LMT+0020'
+
+It is safe for timezones without daylight saving transitions though, such
+as UTC:
+
+>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
+'2002-10-27 12:00:00 UTC+0000'
+
+The preferred way of dealing with times is to always work in UTC,
+converting to localtime only when generating output to be read
+by humans.
+
+>>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
+>>> loc_dt = utc_dt.astimezone(eastern)
+>>> loc_dt.strftime(fmt)
+'2002-10-27 01:00:00 EST-0500'
+
+This library also allows you to do date arithmetic using local
+times, although it is more complicated than working in UTC as you
+need to use the ``normalize()`` method to handle daylight saving time
+and other timezone transitions. In this example, ``loc_dt`` is set
+to the instant when daylight saving time ends in the US/Eastern
+timezone.
+
+>>> before = loc_dt - timedelta(minutes=10)
+>>> before.strftime(fmt)
+'2002-10-27 00:50:00 EST-0500'
+>>> eastern.normalize(before).strftime(fmt)
+'2002-10-27 01:50:00 EDT-0400'
+>>> after = eastern.normalize(before + timedelta(minutes=20))
+>>> after.strftime(fmt)
+'2002-10-27 01:10:00 EST-0500'
+
+Creating local times is also tricky, and the reason why working with
+local times is not recommended. Unfortunately, you cannot just pass
+a ``tzinfo`` argument when constructing a datetime (see the next
+section for more details)
+
+>>> dt = datetime(2002, 10, 27, 1, 30, 0)
+>>> dt1 = eastern.localize(dt, is_dst=True)
+>>> dt1.strftime(fmt)
+'2002-10-27 01:30:00 EDT-0400'
+>>> dt2 = eastern.localize(dt, is_dst=False)
+>>> dt2.strftime(fmt)
+'2002-10-27 01:30:00 EST-0500'
+
+Converting between timezones also needs special attention. We also need
+to use the ``normalize()`` method to ensure the conversion is correct.
+
+>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
+>>> utc_dt.strftime(fmt)
+'2006-03-26 21:34:59 UTC+0000'
+>>> au_tz = timezone('Australia/Sydney')
+>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+>>> au_dt.strftime(fmt)
+'2006-03-27 08:34:59 AEDT+1100'
+>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
+>>> utc_dt2.strftime(fmt)
+'2006-03-26 21:34:59 UTC+0000'
+
+You can take shortcuts when dealing with the UTC side of timezone
+conversions. ``normalize()`` and ``localize()`` are not really
+necessary when there are no daylight saving time transitions to
+deal with.
+
+>>> utc_dt = datetime.utcfromtimestamp(1143408899).replace(tzinfo=utc)
+>>> utc_dt.strftime(fmt)
+'2006-03-26 21:34:59 UTC+0000'
+>>> au_tz = timezone('Australia/Sydney')
+>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+>>> au_dt.strftime(fmt)
+'2006-03-27 08:34:59 AEDT+1100'
+>>> utc_dt2 = au_dt.astimezone(utc)
+>>> utc_dt2.strftime(fmt)
+'2006-03-26 21:34:59 UTC+0000'
+
+
+``tzinfo`` API
+--------------
+
+The ``tzinfo`` instances returned by the ``timezone()`` function have
+been extended to cope with ambiguous times by adding an ``is_dst``
+parameter to the ``utcoffset()``, ``dst()`` && ``tzname()`` methods.
+
+>>> tz = timezone('America/St_Johns')
+
+>>> normal = datetime(2009, 9, 1)
+>>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+The ``is_dst`` parameter is ignored for most timestamps. It is only used
+during DST transition ambiguous periods to resulve that ambiguity.
+
+>>> tz.utcoffset(normal, is_dst=True)
+datetime.timedelta(-1, 77400)
+>>> tz.dst(normal, is_dst=True)
+datetime.timedelta(0, 3600)
+>>> tz.tzname(normal, is_dst=True)
+'NDT'
+
+>>> tz.utcoffset(ambiguous, is_dst=True)
+datetime.timedelta(-1, 77400)
+>>> tz.dst(ambiguous, is_dst=True)
+datetime.timedelta(0, 3600)
+>>> tz.tzname(ambiguous, is_dst=True)
+'NDT'
+
+>>> tz.utcoffset(normal, is_dst=False)
+datetime.timedelta(-1, 77400)
+>>> tz.dst(normal, is_dst=False)
+datetime.timedelta(0, 3600)
+>>> tz.tzname(normal, is_dst=False)
+'NDT'
+
+>>> tz.utcoffset(ambiguous, is_dst=False)
+datetime.timedelta(-1, 73800)
+>>> tz.dst(ambiguous, is_dst=False)
+datetime.timedelta(0)
+>>> tz.tzname(ambiguous, is_dst=False)
+'NST'
+
+If ``is_dst`` is not specified, ambiguous timestamps will raise
+an ``pytz.exceptions.AmbiguousTimeError`` exception.
+
+>>> tz.utcoffset(normal)
+datetime.timedelta(-1, 77400)
+>>> tz.dst(normal)
+datetime.timedelta(0, 3600)
+>>> tz.tzname(normal)
+'NDT'
+
+>>> import pytz.exceptions
+>>> try:
+... tz.utcoffset(ambiguous)
+... except pytz.exceptions.AmbiguousTimeError:
+... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+>>> try:
+... tz.dst(ambiguous)
+... except pytz.exceptions.AmbiguousTimeError:
+... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+>>> try:
+... tz.tzname(ambiguous)
+... except pytz.exceptions.AmbiguousTimeError:
+... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+
+
+Problems with Localtime
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The major problem we have to deal with is that certain datetimes
+may occur twice in a year. For example, in the US/Eastern timezone
+on the last Sunday morning in October, the following sequence
+happens:
+
+ - 01:00 EDT occurs
+ - 1 hour later, instead of 2:00am the clock is turned back 1 hour
+ and 01:00 happens again (this time 01:00 EST)
+
+In fact, every instant between 01:00 and 02:00 occurs twice. This means
+that if you try and create a time in the 'US/Eastern' timezone
+the standard datetime syntax, there is no way to specify if you meant
+before of after the end-of-daylight-saving-time transition. Using the
+pytz custom syntax, the best you can do is make an educated guess:
+
+>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 1, 30, 00))
+>>> loc_dt.strftime(fmt)
+'2002-10-27 01:30:00 EST-0500'
+
+As you can see, the system has chosen one for you and there is a 50%
+chance of it being out by one hour. For some applications, this does
+not matter. However, if you are trying to schedule meetings with people
+in different timezones or analyze log files it is not acceptable.
+
+The best and simplest solution is to stick with using UTC. The pytz
+package encourages using UTC for internal timezone representation by
+including a special UTC implementation based on the standard Python
+reference implementation in the Python documentation.
+
+The UTC timezone unpickles to be the same instance, and pickles to a
+smaller size than other pytz tzinfo instances. The UTC implementation
+can be obtained as pytz.utc, pytz.UTC, or pytz.timezone('UTC').
+
+>>> import pickle, pytz
+>>> dt = datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
+>>> naive = dt.replace(tzinfo=None)
+>>> p = pickle.dumps(dt, 1)
+>>> naive_p = pickle.dumps(naive, 1)
+>>> len(p) - len(naive_p)
+17
+>>> new = pickle.loads(p)
+>>> new == dt
+True
+>>> new is dt
+False
+>>> new.tzinfo is dt.tzinfo
+True
+>>> pytz.utc is pytz.UTC is pytz.timezone('UTC')
+True
+
+Note that some other timezones are commonly thought of as the same (GMT,
+Greenwich, Universal, etc.). The definition of UTC is distinct from these
+other timezones, and they are not equivalent. For this reason, they will
+not compare the same in Python.
+
+>>> utc == pytz.timezone('GMT')
+False
+
+See the section `What is UTC`_, below.
+
+If you insist on working with local times, this library provides a
+facility for constructing them unambiguously:
+
+>>> loc_dt = datetime(2002, 10, 27, 1, 30, 00)
+>>> est_dt = eastern.localize(loc_dt, is_dst=True)
+>>> edt_dt = eastern.localize(loc_dt, is_dst=False)
+>>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt))
+2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500
+
+If you pass None as the is_dst flag to localize(), pytz will refuse to
+guess and raise exceptions if you try to build ambiguous or non-existent
+times.
+
+For example, 1:30am on 27th Oct 2002 happened twice in the US/Eastern
+timezone when the clocks where put back at the end of Daylight Saving
+Time:
+
+>>> dt = datetime(2002, 10, 27, 1, 30, 00)
+>>> try:
+... eastern.localize(dt, is_dst=None)
+... except pytz.exceptions.AmbiguousTimeError:
+... print('pytz.exceptions.AmbiguousTimeError: %s' % dt)
+pytz.exceptions.AmbiguousTimeError: 2002-10-27 01:30:00
+
+Similarly, 2:30am on 7th April 2002 never happened at all in the
+US/Eastern timezone, as the clocks where put forward at 2:00am skipping
+the entire hour:
+
+>>> dt = datetime(2002, 4, 7, 2, 30, 00)
+>>> try:
+... eastern.localize(dt, is_dst=None)
+... except pytz.exceptions.NonExistentTimeError:
+... print('pytz.exceptions.NonExistentTimeError: %s' % dt)
+pytz.exceptions.NonExistentTimeError: 2002-04-07 02:30:00
+
+Both of these exceptions share a common base class to make error handling
+easier:
+
+>>> isinstance(pytz.AmbiguousTimeError(), pytz.InvalidTimeError)
+True
+>>> isinstance(pytz.NonExistentTimeError(), pytz.InvalidTimeError)
+True
+
+
+A special case is where countries change their timezone definitions
+with no daylight savings time switch. For example, in 1915 Warsaw
+switched from Warsaw time to Central European time with no daylight savings
+transition. So at the stroke of midnight on August 5th 1915 the clocks
+were wound back 24 minutes creating an ambiguous time period that cannot
+be specified without referring to the timezone abbreviation or the
+actual UTC offset. In this case midnight happened twice, neither time
+during a daylight saving time period. pytz handles this transition by
+treating the ambiguous period before the switch as daylight savings
+time, and the ambiguous period after as standard time.
+
+
+>>> warsaw = pytz.timezone('Europe/Warsaw')
+>>> amb_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=True)
+>>> amb_dt1.strftime(fmt)
+'1915-08-04 23:59:59 WMT+0124'
+>>> amb_dt2 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False)
+>>> amb_dt2.strftime(fmt)
+'1915-08-04 23:59:59 CET+0100'
+>>> switch_dt = warsaw.localize(datetime(1915, 8, 5, 00, 00, 00), is_dst=False)
+>>> switch_dt.strftime(fmt)
+'1915-08-05 00:00:00 CET+0100'
+>>> str(switch_dt - amb_dt1)
+'0:24:01'
+>>> str(switch_dt - amb_dt2)
+'0:00:01'
+
+The best way of creating a time during an ambiguous time period is
+by converting from another timezone such as UTC:
+
+>>> utc_dt = datetime(1915, 8, 4, 22, 36, tzinfo=pytz.utc)
+>>> utc_dt.astimezone(warsaw).strftime(fmt)
+'1915-08-04 23:36:00 CET+0100'
+
+The standard Python way of handling all these ambiguities is not to
+handle them, such as demonstrated in this example using the US/Eastern
+timezone definition from the Python documentation (Note that this
+implementation only works for dates between 1987 and 2006 - it is
+included for tests only!):
+
+>>> from pytz.reference import Eastern # pytz.reference only for tests
+>>> dt = datetime(2002, 10, 27, 0, 30, tzinfo=Eastern)
+>>> str(dt)
+'2002-10-27 00:30:00-04:00'
+>>> str(dt + timedelta(hours=1))
+'2002-10-27 01:30:00-05:00'
+>>> str(dt + timedelta(hours=2))
+'2002-10-27 02:30:00-05:00'
+>>> str(dt + timedelta(hours=3))
+'2002-10-27 03:30:00-05:00'
+
+Notice the first two results? At first glance you might think they are
+correct, but taking the UTC offset into account you find that they are
+actually two hours appart instead of the 1 hour we asked for.
+
+>>> from pytz.reference import UTC # pytz.reference only for tests
+>>> str(dt.astimezone(UTC))
+'2002-10-27 04:30:00+00:00'
+>>> str((dt + timedelta(hours=1)).astimezone(UTC))
+'2002-10-27 06:30:00+00:00'
+
+
+Country Information
+~~~~~~~~~~~~~~~~~~~
+
+A mechanism is provided to access the timezones commonly in use
+for a particular country, looked up using the ISO 3166 country code.
+It returns a list of strings that can be used to retrieve the relevant
+tzinfo instance using ``pytz.timezone()``:
+
+>>> print(' '.join(pytz.country_timezones['nz']))
+Pacific/Auckland Pacific/Chatham
+
+The Olson database comes with a ISO 3166 country code to English country
+name mapping that pytz exposes as a dictionary:
+
+>>> print(pytz.country_names['nz'])
+New Zealand
+
+
+What is UTC
+~~~~~~~~~~~
+
+'UTC' is `Coordinated Universal Time`_. It is a successor to, but distinct
+from, Greenwich Mean Time (GMT) and the various definitions of Universal
+Time. UTC is now the worldwide standard for regulating clocks and time
+measurement.
+
+All other timezones are defined relative to UTC, and include offsets like
+UTC+0800 - hours to add or subtract from UTC to derive the local time. No
+daylight saving time occurs in UTC, making it a useful timezone to perform
+date arithmetic without worrying about the confusion and ambiguities caused
+by daylight saving time transitions, your country changing its timezone, or
+mobile computers that roam through multiple timezones.
+
+.. _Coordinated Universal Time: https://en.wikipedia.org/wiki/Coordinated_Universal_Time
+
+
+Helpers
+~~~~~~~
+
+There are two lists of timezones provided.
+
+``all_timezones`` is the exhaustive list of the timezone names that can
+be used.
+
+>>> from pytz import all_timezones
+>>> len(all_timezones) >= 500
+True
+>>> 'Etc/Greenwich' in all_timezones
+True
+
+``common_timezones`` is a list of useful, current timezones. It doesn't
+contain deprecated zones or historical zones, except for a few I've
+deemed in common usage, such as US/Eastern (open a bug report if you
+think other timezones are deserving of being included here). It is also
+a sequence of strings.
+
+>>> from pytz import common_timezones
+>>> len(common_timezones) < len(all_timezones)
+True
+>>> 'Etc/Greenwich' in common_timezones
+False
+>>> 'Australia/Melbourne' in common_timezones
+True
+>>> 'US/Eastern' in common_timezones
+True
+>>> 'Canada/Eastern' in common_timezones
+True
+>>> 'US/Pacific-New' in all_timezones
+True
+>>> 'US/Pacific-New' in common_timezones
+False
+
+Both ``common_timezones`` and ``all_timezones`` are alphabetically
+sorted:
+
+>>> common_timezones_dupe = common_timezones[:]
+>>> common_timezones_dupe.sort()
+>>> common_timezones == common_timezones_dupe
+True
+>>> all_timezones_dupe = all_timezones[:]
+>>> all_timezones_dupe.sort()
+>>> all_timezones == all_timezones_dupe
+True
+
+``all_timezones`` and ``common_timezones`` are also available as sets.
+
+>>> from pytz import all_timezones_set, common_timezones_set
+>>> 'US/Eastern' in all_timezones_set
+True
+>>> 'US/Eastern' in common_timezones_set
+True
+>>> 'Australia/Victoria' in common_timezones_set
+False
+
+You can also retrieve lists of timezones used by particular countries
+using the ``country_timezones()`` function. It requires an ISO-3166
+two letter country code.
+
+>>> from pytz import country_timezones
+>>> print(' '.join(country_timezones('ch')))
+Europe/Zurich
+>>> print(' '.join(country_timezones('CH')))
+Europe/Zurich
+
+
+License
+~~~~~~~
+
+MIT license.
+
+This code is also available as part of Zope 3 under the Zope Public
+License, Version 2.1 (ZPL).
+
+I'm happy to relicense this code if necessary for inclusion in other
+open source projects.
+
+
+Latest Versions
+~~~~~~~~~~~~~~~
+
+This package will be updated after releases of the Olson timezone
+database. The latest version can be downloaded from the `Python Package
+Index <http://pypi.python.org/pypi/pytz/>`_. The code that is used
+to generate this distribution is hosted on launchpad.net and available
+using the `Bazaar version control system <http://bazaar-vcs.org>`_
+using::
+
+ bzr branch lp:pytz
+
+Announcements of new releases are made on
+`Launchpad <https://launchpad.net/pytz>`_, and the
+`Atom feed <http://feeds.launchpad.net/pytz/announcements.atom>`_
+hosted there.
+
+
+Bugs, Feature Requests & Patches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs can be reported using `Launchpad <https://bugs.launchpad.net/pytz>`_.
+
+
+Issues & Limitations
+~~~~~~~~~~~~~~~~~~~~
+
+- Offsets from UTC are rounded to the nearest whole minute, so timezones
+ such as Europe/Amsterdam pre 1937 will be up to 30 seconds out. This
+ is a limitation of the Python datetime library.
+
+- If you think a timezone definition is incorrect, I probably can't fix
+ it. pytz is a direct translation of the Olson timezone database, and
+ changes to the timezone definitions need to be made to this source.
+ If you find errors they should be reported to the time zone mailing
+ list, linked from http://www.iana.org/time-zones.
+
+
+Further Reading
+~~~~~~~~~~~~~~~
+
+More info than you want to know about timezones:
+http://www.twinsun.com/tz/tz-link.htm
+
+
+Contact
+~~~~~~~
+
+Stuart Bishop <stuart@stuartbishop.net>
+
+
diff --git a/pytz.egg-info/PKG-INFO b/pytz.egg-info/PKG-INFO
new file mode 100644
index 0000000..5577abd
--- /dev/null
+++ b/pytz.egg-info/PKG-INFO
@@ -0,0 +1,595 @@
+Metadata-Version: 1.1
+Name: pytz
+Version: 2014.10
+Summary: World timezone definitions, modern and historical
+Home-page: http://pythonhosted.org/pytz
+Author: Stuart Bishop
+Author-email: stuart@stuartbishop.net
+License: MIT
+Download-URL: http://pypi.python.org/pypi/pytz
+Description: pytz - World Timezone Definitions for Python
+ ============================================
+
+ :Author: Stuart Bishop <stuart@stuartbishop.net>
+
+ Introduction
+ ~~~~~~~~~~~~
+
+ pytz brings the Olson tz database into Python. This library allows
+ accurate and cross platform timezone calculations using Python 2.4
+ or higher. It also solves the issue of ambiguous times at the end
+ of daylight saving time, which you can read more about in the Python
+ Library Reference (``datetime.tzinfo``).
+
+ Almost all of the Olson timezones are supported.
+
+ .. note::
+
+ This library differs from the documented Python API for
+ tzinfo implementations; if you want to create local wallclock
+ times you need to use the ``localize()`` method documented in this
+ document. In addition, if you perform date arithmetic on local
+ times that cross DST boundaries, the result may be in an incorrect
+ timezone (ie. subtract 1 minute from 2002-10-27 1:00 EST and you get
+ 2002-10-27 0:59 EST instead of the correct 2002-10-27 1:59 EDT). A
+ ``normalize()`` method is provided to correct this. Unfortunately these
+ issues cannot be resolved without modifying the Python datetime
+ implementation (see PEP-431).
+
+
+ Installation
+ ~~~~~~~~~~~~
+
+ This package can either be installed from a .egg file using setuptools,
+ or from the tarball using the standard Python distutils.
+
+ If you are installing from a tarball, run the following command as an
+ administrative user::
+
+ python setup.py install
+
+ If you are installing using setuptools, you don't even need to download
+ anything as the latest version will be downloaded for you
+ from the Python package index::
+
+ easy_install --upgrade pytz
+
+ If you already have the .egg file, you can use that too::
+
+ easy_install pytz-2008g-py2.6.egg
+
+
+ Example & Usage
+ ~~~~~~~~~~~~~~~
+
+ Localized times and date arithmetic
+ -----------------------------------
+
+ >>> from datetime import datetime, timedelta
+ >>> from pytz import timezone
+ >>> import pytz
+ >>> utc = pytz.utc
+ >>> utc.zone
+ 'UTC'
+ >>> eastern = timezone('US/Eastern')
+ >>> eastern.zone
+ 'US/Eastern'
+ >>> amsterdam = timezone('Europe/Amsterdam')
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+
+ This library only supports two ways of building a localized time. The
+ first is to use the ``localize()`` method provided by the pytz library.
+ This is used to localize a naive datetime (datetime with no timezone
+ information):
+
+ >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
+ >>> print(loc_dt.strftime(fmt))
+ 2002-10-27 06:00:00 EST-0500
+
+ The second way of building a localized time is by converting an existing
+ localized time using the standard ``astimezone()`` method:
+
+ >>> ams_dt = loc_dt.astimezone(amsterdam)
+ >>> ams_dt.strftime(fmt)
+ '2002-10-27 12:00:00 CET+0100'
+
+ Unfortunately using the tzinfo argument of the standard datetime
+ constructors ''does not work'' with pytz for many timezones.
+
+ >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
+ '2002-10-27 12:00:00 LMT+0020'
+
+ It is safe for timezones without daylight saving transitions though, such
+ as UTC:
+
+ >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
+ '2002-10-27 12:00:00 UTC+0000'
+
+ The preferred way of dealing with times is to always work in UTC,
+ converting to localtime only when generating output to be read
+ by humans.
+
+ >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
+ >>> loc_dt = utc_dt.astimezone(eastern)
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:00:00 EST-0500'
+
+ This library also allows you to do date arithmetic using local
+ times, although it is more complicated than working in UTC as you
+ need to use the ``normalize()`` method to handle daylight saving time
+ and other timezone transitions. In this example, ``loc_dt`` is set
+ to the instant when daylight saving time ends in the US/Eastern
+ timezone.
+
+ >>> before = loc_dt - timedelta(minutes=10)
+ >>> before.strftime(fmt)
+ '2002-10-27 00:50:00 EST-0500'
+ >>> eastern.normalize(before).strftime(fmt)
+ '2002-10-27 01:50:00 EDT-0400'
+ >>> after = eastern.normalize(before + timedelta(minutes=20))
+ >>> after.strftime(fmt)
+ '2002-10-27 01:10:00 EST-0500'
+
+ Creating local times is also tricky, and the reason why working with
+ local times is not recommended. Unfortunately, you cannot just pass
+ a ``tzinfo`` argument when constructing a datetime (see the next
+ section for more details)
+
+ >>> dt = datetime(2002, 10, 27, 1, 30, 0)
+ >>> dt1 = eastern.localize(dt, is_dst=True)
+ >>> dt1.strftime(fmt)
+ '2002-10-27 01:30:00 EDT-0400'
+ >>> dt2 = eastern.localize(dt, is_dst=False)
+ >>> dt2.strftime(fmt)
+ '2002-10-27 01:30:00 EST-0500'
+
+ Converting between timezones also needs special attention. We also need
+ to use the ``normalize()`` method to ensure the conversion is correct.
+
+ >>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
+ >>> utc_dt.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+ >>> au_tz = timezone('Australia/Sydney')
+ >>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+ >>> au_dt.strftime(fmt)
+ '2006-03-27 08:34:59 AEDT+1100'
+ >>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
+ >>> utc_dt2.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+
+ You can take shortcuts when dealing with the UTC side of timezone
+ conversions. ``normalize()`` and ``localize()`` are not really
+ necessary when there are no daylight saving time transitions to
+ deal with.
+
+ >>> utc_dt = datetime.utcfromtimestamp(1143408899).replace(tzinfo=utc)
+ >>> utc_dt.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+ >>> au_tz = timezone('Australia/Sydney')
+ >>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
+ >>> au_dt.strftime(fmt)
+ '2006-03-27 08:34:59 AEDT+1100'
+ >>> utc_dt2 = au_dt.astimezone(utc)
+ >>> utc_dt2.strftime(fmt)
+ '2006-03-26 21:34:59 UTC+0000'
+
+
+ ``tzinfo`` API
+ --------------
+
+ The ``tzinfo`` instances returned by the ``timezone()`` function have
+ been extended to cope with ambiguous times by adding an ``is_dst``
+ parameter to the ``utcoffset()``, ``dst()`` && ``tzname()`` methods.
+
+ >>> tz = timezone('America/St_Johns')
+
+ >>> normal = datetime(2009, 9, 1)
+ >>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+ The ``is_dst`` parameter is ignored for most timestamps. It is only used
+ during DST transition ambiguous periods to resulve that ambiguity.
+
+ >>> tz.utcoffset(normal, is_dst=True)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal, is_dst=True)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal, is_dst=True)
+ 'NDT'
+
+ >>> tz.utcoffset(ambiguous, is_dst=True)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(ambiguous, is_dst=True)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(ambiguous, is_dst=True)
+ 'NDT'
+
+ >>> tz.utcoffset(normal, is_dst=False)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal, is_dst=False)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal, is_dst=False)
+ 'NDT'
+
+ >>> tz.utcoffset(ambiguous, is_dst=False)
+ datetime.timedelta(-1, 73800)
+ >>> tz.dst(ambiguous, is_dst=False)
+ datetime.timedelta(0)
+ >>> tz.tzname(ambiguous, is_dst=False)
+ 'NST'
+
+ If ``is_dst`` is not specified, ambiguous timestamps will raise
+ an ``pytz.exceptions.AmbiguousTimeError`` exception.
+
+ >>> tz.utcoffset(normal)
+ datetime.timedelta(-1, 77400)
+ >>> tz.dst(normal)
+ datetime.timedelta(0, 3600)
+ >>> tz.tzname(normal)
+ 'NDT'
+
+ >>> import pytz.exceptions
+ >>> try:
+ ... tz.utcoffset(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+ >>> try:
+ ... tz.dst(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+ >>> try:
+ ... tz.tzname(ambiguous)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
+ pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
+
+
+ Problems with Localtime
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ The major problem we have to deal with is that certain datetimes
+ may occur twice in a year. For example, in the US/Eastern timezone
+ on the last Sunday morning in October, the following sequence
+ happens:
+
+ - 01:00 EDT occurs
+ - 1 hour later, instead of 2:00am the clock is turned back 1 hour
+ and 01:00 happens again (this time 01:00 EST)
+
+ In fact, every instant between 01:00 and 02:00 occurs twice. This means
+ that if you try and create a time in the 'US/Eastern' timezone
+ the standard datetime syntax, there is no way to specify if you meant
+ before of after the end-of-daylight-saving-time transition. Using the
+ pytz custom syntax, the best you can do is make an educated guess:
+
+ >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 1, 30, 00))
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:30:00 EST-0500'
+
+ As you can see, the system has chosen one for you and there is a 50%
+ chance of it being out by one hour. For some applications, this does
+ not matter. However, if you are trying to schedule meetings with people
+ in different timezones or analyze log files it is not acceptable.
+
+ The best and simplest solution is to stick with using UTC. The pytz
+ package encourages using UTC for internal timezone representation by
+ including a special UTC implementation based on the standard Python
+ reference implementation in the Python documentation.
+
+ The UTC timezone unpickles to be the same instance, and pickles to a
+ smaller size than other pytz tzinfo instances. The UTC implementation
+ can be obtained as pytz.utc, pytz.UTC, or pytz.timezone('UTC').
+
+ >>> import pickle, pytz
+ >>> dt = datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
+ >>> naive = dt.replace(tzinfo=None)
+ >>> p = pickle.dumps(dt, 1)
+ >>> naive_p = pickle.dumps(naive, 1)
+ >>> len(p) - len(naive_p)
+ 17
+ >>> new = pickle.loads(p)
+ >>> new == dt
+ True
+ >>> new is dt
+ False
+ >>> new.tzinfo is dt.tzinfo
+ True
+ >>> pytz.utc is pytz.UTC is pytz.timezone('UTC')
+ True
+
+ Note that some other timezones are commonly thought of as the same (GMT,
+ Greenwich, Universal, etc.). The definition of UTC is distinct from these
+ other timezones, and they are not equivalent. For this reason, they will
+ not compare the same in Python.
+
+ >>> utc == pytz.timezone('GMT')
+ False
+
+ See the section `What is UTC`_, below.
+
+ If you insist on working with local times, this library provides a
+ facility for constructing them unambiguously:
+
+ >>> loc_dt = datetime(2002, 10, 27, 1, 30, 00)
+ >>> est_dt = eastern.localize(loc_dt, is_dst=True)
+ >>> edt_dt = eastern.localize(loc_dt, is_dst=False)
+ >>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt))
+ 2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500
+
+ If you pass None as the is_dst flag to localize(), pytz will refuse to
+ guess and raise exceptions if you try to build ambiguous or non-existent
+ times.
+
+ For example, 1:30am on 27th Oct 2002 happened twice in the US/Eastern
+ timezone when the clocks where put back at the end of Daylight Saving
+ Time:
+
+ >>> dt = datetime(2002, 10, 27, 1, 30, 00)
+ >>> try:
+ ... eastern.localize(dt, is_dst=None)
+ ... except pytz.exceptions.AmbiguousTimeError:
+ ... print('pytz.exceptions.AmbiguousTimeError: %s' % dt)
+ pytz.exceptions.AmbiguousTimeError: 2002-10-27 01:30:00
+
+ Similarly, 2:30am on 7th April 2002 never happened at all in the
+ US/Eastern timezone, as the clocks where put forward at 2:00am skipping
+ the entire hour:
+
+ >>> dt = datetime(2002, 4, 7, 2, 30, 00)
+ >>> try:
+ ... eastern.localize(dt, is_dst=None)
+ ... except pytz.exceptions.NonExistentTimeError:
+ ... print('pytz.exceptions.NonExistentTimeError: %s' % dt)
+ pytz.exceptions.NonExistentTimeError: 2002-04-07 02:30:00
+
+ Both of these exceptions share a common base class to make error handling
+ easier:
+
+ >>> isinstance(pytz.AmbiguousTimeError(), pytz.InvalidTimeError)
+ True
+ >>> isinstance(pytz.NonExistentTimeError(), pytz.InvalidTimeError)
+ True
+
+
+ A special case is where countries change their timezone definitions
+ with no daylight savings time switch. For example, in 1915 Warsaw
+ switched from Warsaw time to Central European time with no daylight savings
+ transition. So at the stroke of midnight on August 5th 1915 the clocks
+ were wound back 24 minutes creating an ambiguous time period that cannot
+ be specified without referring to the timezone abbreviation or the
+ actual UTC offset. In this case midnight happened twice, neither time
+ during a daylight saving time period. pytz handles this transition by
+ treating the ambiguous period before the switch as daylight savings
+ time, and the ambiguous period after as standard time.
+
+
+ >>> warsaw = pytz.timezone('Europe/Warsaw')
+ >>> amb_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=True)
+ >>> amb_dt1.strftime(fmt)
+ '1915-08-04 23:59:59 WMT+0124'
+ >>> amb_dt2 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False)
+ >>> amb_dt2.strftime(fmt)
+ '1915-08-04 23:59:59 CET+0100'
+ >>> switch_dt = warsaw.localize(datetime(1915, 8, 5, 00, 00, 00), is_dst=False)
+ >>> switch_dt.strftime(fmt)
+ '1915-08-05 00:00:00 CET+0100'
+ >>> str(switch_dt - amb_dt1)
+ '0:24:01'
+ >>> str(switch_dt - amb_dt2)
+ '0:00:01'
+
+ The best way of creating a time during an ambiguous time period is
+ by converting from another timezone such as UTC:
+
+ >>> utc_dt = datetime(1915, 8, 4, 22, 36, tzinfo=pytz.utc)
+ >>> utc_dt.astimezone(warsaw).strftime(fmt)
+ '1915-08-04 23:36:00 CET+0100'
+
+ The standard Python way of handling all these ambiguities is not to
+ handle them, such as demonstrated in this example using the US/Eastern
+ timezone definition from the Python documentation (Note that this
+ implementation only works for dates between 1987 and 2006 - it is
+ included for tests only!):
+
+ >>> from pytz.reference import Eastern # pytz.reference only for tests
+ >>> dt = datetime(2002, 10, 27, 0, 30, tzinfo=Eastern)
+ >>> str(dt)
+ '2002-10-27 00:30:00-04:00'
+ >>> str(dt + timedelta(hours=1))
+ '2002-10-27 01:30:00-05:00'
+ >>> str(dt + timedelta(hours=2))
+ '2002-10-27 02:30:00-05:00'
+ >>> str(dt + timedelta(hours=3))
+ '2002-10-27 03:30:00-05:00'
+
+ Notice the first two results? At first glance you might think they are
+ correct, but taking the UTC offset into account you find that they are
+ actually two hours appart instead of the 1 hour we asked for.
+
+ >>> from pytz.reference import UTC # pytz.reference only for tests
+ >>> str(dt.astimezone(UTC))
+ '2002-10-27 04:30:00+00:00'
+ >>> str((dt + timedelta(hours=1)).astimezone(UTC))
+ '2002-10-27 06:30:00+00:00'
+
+
+ Country Information
+ ~~~~~~~~~~~~~~~~~~~
+
+ A mechanism is provided to access the timezones commonly in use
+ for a particular country, looked up using the ISO 3166 country code.
+ It returns a list of strings that can be used to retrieve the relevant
+ tzinfo instance using ``pytz.timezone()``:
+
+ >>> print(' '.join(pytz.country_timezones['nz']))
+ Pacific/Auckland Pacific/Chatham
+
+ The Olson database comes with a ISO 3166 country code to English country
+ name mapping that pytz exposes as a dictionary:
+
+ >>> print(pytz.country_names['nz'])
+ New Zealand
+
+
+ What is UTC
+ ~~~~~~~~~~~
+
+ 'UTC' is `Coordinated Universal Time`_. It is a successor to, but distinct
+ from, Greenwich Mean Time (GMT) and the various definitions of Universal
+ Time. UTC is now the worldwide standard for regulating clocks and time
+ measurement.
+
+ All other timezones are defined relative to UTC, and include offsets like
+ UTC+0800 - hours to add or subtract from UTC to derive the local time. No
+ daylight saving time occurs in UTC, making it a useful timezone to perform
+ date arithmetic without worrying about the confusion and ambiguities caused
+ by daylight saving time transitions, your country changing its timezone, or
+ mobile computers that roam through multiple timezones.
+
+ .. _Coordinated Universal Time: https://en.wikipedia.org/wiki/Coordinated_Universal_Time
+
+
+ Helpers
+ ~~~~~~~
+
+ There are two lists of timezones provided.
+
+ ``all_timezones`` is the exhaustive list of the timezone names that can
+ be used.
+
+ >>> from pytz import all_timezones
+ >>> len(all_timezones) >= 500
+ True
+ >>> 'Etc/Greenwich' in all_timezones
+ True
+
+ ``common_timezones`` is a list of useful, current timezones. It doesn't
+ contain deprecated zones or historical zones, except for a few I've
+ deemed in common usage, such as US/Eastern (open a bug report if you
+ think other timezones are deserving of being included here). It is also
+ a sequence of strings.
+
+ >>> from pytz import common_timezones
+ >>> len(common_timezones) < len(all_timezones)
+ True
+ >>> 'Etc/Greenwich' in common_timezones
+ False
+ >>> 'Australia/Melbourne' in common_timezones
+ True
+ >>> 'US/Eastern' in common_timezones
+ True
+ >>> 'Canada/Eastern' in common_timezones
+ True
+ >>> 'US/Pacific-New' in all_timezones
+ True
+ >>> 'US/Pacific-New' in common_timezones
+ False
+
+ Both ``common_timezones`` and ``all_timezones`` are alphabetically
+ sorted:
+
+ >>> common_timezones_dupe = common_timezones[:]
+ >>> common_timezones_dupe.sort()
+ >>> common_timezones == common_timezones_dupe
+ True
+ >>> all_timezones_dupe = all_timezones[:]
+ >>> all_timezones_dupe.sort()
+ >>> all_timezones == all_timezones_dupe
+ True
+
+ ``all_timezones`` and ``common_timezones`` are also available as sets.
+
+ >>> from pytz import all_timezones_set, common_timezones_set
+ >>> 'US/Eastern' in all_timezones_set
+ True
+ >>> 'US/Eastern' in common_timezones_set
+ True
+ >>> 'Australia/Victoria' in common_timezones_set
+ False
+
+ You can also retrieve lists of timezones used by particular countries
+ using the ``country_timezones()`` function. It requires an ISO-3166
+ two letter country code.
+
+ >>> from pytz import country_timezones
+ >>> print(' '.join(country_timezones('ch')))
+ Europe/Zurich
+ >>> print(' '.join(country_timezones('CH')))
+ Europe/Zurich
+
+
+ License
+ ~~~~~~~
+
+ MIT license.
+
+ This code is also available as part of Zope 3 under the Zope Public
+ License, Version 2.1 (ZPL).
+
+ I'm happy to relicense this code if necessary for inclusion in other
+ open source projects.
+
+
+ Latest Versions
+ ~~~~~~~~~~~~~~~
+
+ This package will be updated after releases of the Olson timezone
+ database. The latest version can be downloaded from the `Python Package
+ Index <http://pypi.python.org/pypi/pytz/>`_. The code that is used
+ to generate this distribution is hosted on launchpad.net and available
+ using the `Bazaar version control system <http://bazaar-vcs.org>`_
+ using::
+
+ bzr branch lp:pytz
+
+ Announcements of new releases are made on
+ `Launchpad <https://launchpad.net/pytz>`_, and the
+ `Atom feed <http://feeds.launchpad.net/pytz/announcements.atom>`_
+ hosted there.
+
+
+ Bugs, Feature Requests & Patches
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bugs can be reported using `Launchpad <https://bugs.launchpad.net/pytz>`_.
+
+
+ Issues & Limitations
+ ~~~~~~~~~~~~~~~~~~~~
+
+ - Offsets from UTC are rounded to the nearest whole minute, so timezones
+ such as Europe/Amsterdam pre 1937 will be up to 30 seconds out. This
+ is a limitation of the Python datetime library.
+
+ - If you think a timezone definition is incorrect, I probably can't fix
+ it. pytz is a direct translation of the Olson timezone database, and
+ changes to the timezone definitions need to be made to this source.
+ If you find errors they should be reported to the time zone mailing
+ list, linked from http://www.iana.org/time-zones.
+
+
+ Further Reading
+ ~~~~~~~~~~~~~~~
+
+ More info than you want to know about timezones:
+ http://www.twinsun.com/tz/tz-link.htm
+
+
+ Contact
+ ~~~~~~~
+
+ Stuart Bishop <stuart@stuartbishop.net>
+
+
+
+Keywords: timezone,tzinfo,datetime,olson,time
+Platform: Independant
+Classifier: Development Status :: 6 - Mature
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Natural Language :: English
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff --git a/pytz.egg-info/SOURCES.txt b/pytz.egg-info/SOURCES.txt
new file mode 100644
index 0000000..86a3d7a
--- /dev/null
+++ b/pytz.egg-info/SOURCES.txt
@@ -0,0 +1,607 @@
+CHANGES.txt
+LICENSE.txt
+MANIFEST.in
+README.txt
+setup.py
+pytz/__init__.py
+pytz/exceptions.py
+pytz/lazy.py
+pytz/reference.py
+pytz/tzfile.py
+pytz/tzinfo.py
+pytz.egg-info/PKG-INFO
+pytz.egg-info/SOURCES.txt
+pytz.egg-info/dependency_links.txt
+pytz.egg-info/top_level.txt
+pytz.egg-info/zip-safe
+pytz/tests/test_docs.py
+pytz/tests/test_lazy.py
+pytz/tests/test_tzinfo.py
+pytz/zoneinfo/CET
+pytz/zoneinfo/CST6CDT
+pytz/zoneinfo/Cuba
+pytz/zoneinfo/EET
+pytz/zoneinfo/EST
+pytz/zoneinfo/EST5EDT
+pytz/zoneinfo/Egypt
+pytz/zoneinfo/Eire
+pytz/zoneinfo/Factory
+pytz/zoneinfo/GB
+pytz/zoneinfo/GB-Eire
+pytz/zoneinfo/GMT
+pytz/zoneinfo/GMT+0
+pytz/zoneinfo/GMT-0
+pytz/zoneinfo/GMT0
+pytz/zoneinfo/Greenwich
+pytz/zoneinfo/HST
+pytz/zoneinfo/Hongkong
+pytz/zoneinfo/Iceland
+pytz/zoneinfo/Iran
+pytz/zoneinfo/Israel
+pytz/zoneinfo/Jamaica
+pytz/zoneinfo/Japan
+pytz/zoneinfo/Kwajalein
+pytz/zoneinfo/Libya
+pytz/zoneinfo/MET
+pytz/zoneinfo/MST
+pytz/zoneinfo/MST7MDT
+pytz/zoneinfo/NZ
+pytz/zoneinfo/NZ-CHAT
+pytz/zoneinfo/Navajo
+pytz/zoneinfo/PRC
+pytz/zoneinfo/PST8PDT
+pytz/zoneinfo/Poland
+pytz/zoneinfo/Portugal
+pytz/zoneinfo/ROC
+pytz/zoneinfo/ROK
+pytz/zoneinfo/Singapore
+pytz/zoneinfo/Turkey
+pytz/zoneinfo/UCT
+pytz/zoneinfo/UTC
+pytz/zoneinfo/Universal
+pytz/zoneinfo/W-SU
+pytz/zoneinfo/WET
+pytz/zoneinfo/Zulu
+pytz/zoneinfo/iso3166.tab
+pytz/zoneinfo/localtime
+pytz/zoneinfo/posixrules
+pytz/zoneinfo/zone.tab
+pytz/zoneinfo/zone1970.tab
+pytz/zoneinfo/Africa/Abidjan
+pytz/zoneinfo/Africa/Accra
+pytz/zoneinfo/Africa/Addis_Ababa
+pytz/zoneinfo/Africa/Algiers
+pytz/zoneinfo/Africa/Asmara
+pytz/zoneinfo/Africa/Asmera
+pytz/zoneinfo/Africa/Bamako
+pytz/zoneinfo/Africa/Bangui
+pytz/zoneinfo/Africa/Banjul
+pytz/zoneinfo/Africa/Bissau
+pytz/zoneinfo/Africa/Blantyre
+pytz/zoneinfo/Africa/Brazzaville
+pytz/zoneinfo/Africa/Bujumbura
+pytz/zoneinfo/Africa/Cairo
+pytz/zoneinfo/Africa/Casablanca
+pytz/zoneinfo/Africa/Ceuta
+pytz/zoneinfo/Africa/Conakry
+pytz/zoneinfo/Africa/Dakar
+pytz/zoneinfo/Africa/Dar_es_Salaam
+pytz/zoneinfo/Africa/Djibouti
+pytz/zoneinfo/Africa/Douala
+pytz/zoneinfo/Africa/El_Aaiun
+pytz/zoneinfo/Africa/Freetown
+pytz/zoneinfo/Africa/Gaborone
+pytz/zoneinfo/Africa/Harare
+pytz/zoneinfo/Africa/Johannesburg
+pytz/zoneinfo/Africa/Juba
+pytz/zoneinfo/Africa/Kampala
+pytz/zoneinfo/Africa/Khartoum
+pytz/zoneinfo/Africa/Kigali
+pytz/zoneinfo/Africa/Kinshasa
+pytz/zoneinfo/Africa/Lagos
+pytz/zoneinfo/Africa/Libreville
+pytz/zoneinfo/Africa/Lome
+pytz/zoneinfo/Africa/Luanda
+pytz/zoneinfo/Africa/Lubumbashi
+pytz/zoneinfo/Africa/Lusaka
+pytz/zoneinfo/Africa/Malabo
+pytz/zoneinfo/Africa/Maputo
+pytz/zoneinfo/Africa/Maseru
+pytz/zoneinfo/Africa/Mbabane
+pytz/zoneinfo/Africa/Mogadishu
+pytz/zoneinfo/Africa/Monrovia
+pytz/zoneinfo/Africa/Nairobi
+pytz/zoneinfo/Africa/Ndjamena
+pytz/zoneinfo/Africa/Niamey
+pytz/zoneinfo/Africa/Nouakchott
+pytz/zoneinfo/Africa/Ouagadougou
+pytz/zoneinfo/Africa/Porto-Novo
+pytz/zoneinfo/Africa/Sao_Tome
+pytz/zoneinfo/Africa/Timbuktu
+pytz/zoneinfo/Africa/Tripoli
+pytz/zoneinfo/Africa/Tunis
+pytz/zoneinfo/Africa/Windhoek
+pytz/zoneinfo/America/Adak
+pytz/zoneinfo/America/Anchorage
+pytz/zoneinfo/America/Anguilla
+pytz/zoneinfo/America/Antigua
+pytz/zoneinfo/America/Araguaina
+pytz/zoneinfo/America/Aruba
+pytz/zoneinfo/America/Asuncion
+pytz/zoneinfo/America/Atikokan
+pytz/zoneinfo/America/Atka
+pytz/zoneinfo/America/Bahia
+pytz/zoneinfo/America/Bahia_Banderas
+pytz/zoneinfo/America/Barbados
+pytz/zoneinfo/America/Belem
+pytz/zoneinfo/America/Belize
+pytz/zoneinfo/America/Blanc-Sablon
+pytz/zoneinfo/America/Boa_Vista
+pytz/zoneinfo/America/Bogota
+pytz/zoneinfo/America/Boise
+pytz/zoneinfo/America/Buenos_Aires
+pytz/zoneinfo/America/Cambridge_Bay
+pytz/zoneinfo/America/Campo_Grande
+pytz/zoneinfo/America/Cancun
+pytz/zoneinfo/America/Caracas
+pytz/zoneinfo/America/Catamarca
+pytz/zoneinfo/America/Cayenne
+pytz/zoneinfo/America/Cayman
+pytz/zoneinfo/America/Chicago
+pytz/zoneinfo/America/Chihuahua
+pytz/zoneinfo/America/Coral_Harbour
+pytz/zoneinfo/America/Cordoba
+pytz/zoneinfo/America/Costa_Rica
+pytz/zoneinfo/America/Creston
+pytz/zoneinfo/America/Cuiaba
+pytz/zoneinfo/America/Curacao
+pytz/zoneinfo/America/Danmarkshavn
+pytz/zoneinfo/America/Dawson
+pytz/zoneinfo/America/Dawson_Creek
+pytz/zoneinfo/America/Denver
+pytz/zoneinfo/America/Detroit
+pytz/zoneinfo/America/Dominica
+pytz/zoneinfo/America/Edmonton
+pytz/zoneinfo/America/Eirunepe
+pytz/zoneinfo/America/El_Salvador
+pytz/zoneinfo/America/Ensenada
+pytz/zoneinfo/America/Fort_Wayne
+pytz/zoneinfo/America/Fortaleza
+pytz/zoneinfo/America/Glace_Bay
+pytz/zoneinfo/America/Godthab
+pytz/zoneinfo/America/Goose_Bay
+pytz/zoneinfo/America/Grand_Turk
+pytz/zoneinfo/America/Grenada
+pytz/zoneinfo/America/Guadeloupe
+pytz/zoneinfo/America/Guatemala
+pytz/zoneinfo/America/Guayaquil
+pytz/zoneinfo/America/Guyana
+pytz/zoneinfo/America/Halifax
+pytz/zoneinfo/America/Havana
+pytz/zoneinfo/America/Hermosillo
+pytz/zoneinfo/America/Indianapolis
+pytz/zoneinfo/America/Inuvik
+pytz/zoneinfo/America/Iqaluit
+pytz/zoneinfo/America/Jamaica
+pytz/zoneinfo/America/Jujuy
+pytz/zoneinfo/America/Juneau
+pytz/zoneinfo/America/Knox_IN
+pytz/zoneinfo/America/Kralendijk
+pytz/zoneinfo/America/La_Paz
+pytz/zoneinfo/America/Lima
+pytz/zoneinfo/America/Los_Angeles
+pytz/zoneinfo/America/Louisville
+pytz/zoneinfo/America/Lower_Princes
+pytz/zoneinfo/America/Maceio
+pytz/zoneinfo/America/Managua
+pytz/zoneinfo/America/Manaus
+pytz/zoneinfo/America/Marigot
+pytz/zoneinfo/America/Martinique
+pytz/zoneinfo/America/Matamoros
+pytz/zoneinfo/America/Mazatlan
+pytz/zoneinfo/America/Mendoza
+pytz/zoneinfo/America/Menominee
+pytz/zoneinfo/America/Merida
+pytz/zoneinfo/America/Metlakatla
+pytz/zoneinfo/America/Mexico_City
+pytz/zoneinfo/America/Miquelon
+pytz/zoneinfo/America/Moncton
+pytz/zoneinfo/America/Monterrey
+pytz/zoneinfo/America/Montevideo
+pytz/zoneinfo/America/Montreal
+pytz/zoneinfo/America/Montserrat
+pytz/zoneinfo/America/Nassau
+pytz/zoneinfo/America/New_York
+pytz/zoneinfo/America/Nipigon
+pytz/zoneinfo/America/Nome
+pytz/zoneinfo/America/Noronha
+pytz/zoneinfo/America/Ojinaga
+pytz/zoneinfo/America/Panama
+pytz/zoneinfo/America/Pangnirtung
+pytz/zoneinfo/America/Paramaribo
+pytz/zoneinfo/America/Phoenix
+pytz/zoneinfo/America/Port-au-Prince
+pytz/zoneinfo/America/Port_of_Spain
+pytz/zoneinfo/America/Porto_Acre
+pytz/zoneinfo/America/Porto_Velho
+pytz/zoneinfo/America/Puerto_Rico
+pytz/zoneinfo/America/Rainy_River
+pytz/zoneinfo/America/Rankin_Inlet
+pytz/zoneinfo/America/Recife
+pytz/zoneinfo/America/Regina
+pytz/zoneinfo/America/Resolute
+pytz/zoneinfo/America/Rio_Branco
+pytz/zoneinfo/America/Rosario
+pytz/zoneinfo/America/Santa_Isabel
+pytz/zoneinfo/America/Santarem
+pytz/zoneinfo/America/Santiago
+pytz/zoneinfo/America/Santo_Domingo
+pytz/zoneinfo/America/Sao_Paulo
+pytz/zoneinfo/America/Scoresbysund
+pytz/zoneinfo/America/Shiprock
+pytz/zoneinfo/America/Sitka
+pytz/zoneinfo/America/St_Barthelemy
+pytz/zoneinfo/America/St_Johns
+pytz/zoneinfo/America/St_Kitts
+pytz/zoneinfo/America/St_Lucia
+pytz/zoneinfo/America/St_Thomas
+pytz/zoneinfo/America/St_Vincent
+pytz/zoneinfo/America/Swift_Current
+pytz/zoneinfo/America/Tegucigalpa
+pytz/zoneinfo/America/Thule
+pytz/zoneinfo/America/Thunder_Bay
+pytz/zoneinfo/America/Tijuana
+pytz/zoneinfo/America/Toronto
+pytz/zoneinfo/America/Tortola
+pytz/zoneinfo/America/Vancouver
+pytz/zoneinfo/America/Virgin
+pytz/zoneinfo/America/Whitehorse
+pytz/zoneinfo/America/Winnipeg
+pytz/zoneinfo/America/Yakutat
+pytz/zoneinfo/America/Yellowknife
+pytz/zoneinfo/America/Argentina/Buenos_Aires
+pytz/zoneinfo/America/Argentina/Catamarca
+pytz/zoneinfo/America/Argentina/ComodRivadavia
+pytz/zoneinfo/America/Argentina/Cordoba
+pytz/zoneinfo/America/Argentina/Jujuy
+pytz/zoneinfo/America/Argentina/La_Rioja
+pytz/zoneinfo/America/Argentina/Mendoza
+pytz/zoneinfo/America/Argentina/Rio_Gallegos
+pytz/zoneinfo/America/Argentina/Salta
+pytz/zoneinfo/America/Argentina/San_Juan
+pytz/zoneinfo/America/Argentina/San_Luis
+pytz/zoneinfo/America/Argentina/Tucuman
+pytz/zoneinfo/America/Argentina/Ushuaia
+pytz/zoneinfo/America/Indiana/Indianapolis
+pytz/zoneinfo/America/Indiana/Knox
+pytz/zoneinfo/America/Indiana/Marengo
+pytz/zoneinfo/America/Indiana/Petersburg
+pytz/zoneinfo/America/Indiana/Tell_City
+pytz/zoneinfo/America/Indiana/Vevay
+pytz/zoneinfo/America/Indiana/Vincennes
+pytz/zoneinfo/America/Indiana/Winamac
+pytz/zoneinfo/America/Kentucky/Louisville
+pytz/zoneinfo/America/Kentucky/Monticello
+pytz/zoneinfo/America/North_Dakota/Beulah
+pytz/zoneinfo/America/North_Dakota/Center
+pytz/zoneinfo/America/North_Dakota/New_Salem
+pytz/zoneinfo/Antarctica/Casey
+pytz/zoneinfo/Antarctica/Davis
+pytz/zoneinfo/Antarctica/DumontDUrville
+pytz/zoneinfo/Antarctica/Macquarie
+pytz/zoneinfo/Antarctica/Mawson
+pytz/zoneinfo/Antarctica/McMurdo
+pytz/zoneinfo/Antarctica/Palmer
+pytz/zoneinfo/Antarctica/Rothera
+pytz/zoneinfo/Antarctica/South_Pole
+pytz/zoneinfo/Antarctica/Syowa
+pytz/zoneinfo/Antarctica/Troll
+pytz/zoneinfo/Antarctica/Vostok
+pytz/zoneinfo/Arctic/Longyearbyen
+pytz/zoneinfo/Asia/Aden
+pytz/zoneinfo/Asia/Almaty
+pytz/zoneinfo/Asia/Amman
+pytz/zoneinfo/Asia/Anadyr
+pytz/zoneinfo/Asia/Aqtau
+pytz/zoneinfo/Asia/Aqtobe
+pytz/zoneinfo/Asia/Ashgabat
+pytz/zoneinfo/Asia/Ashkhabad
+pytz/zoneinfo/Asia/Baghdad
+pytz/zoneinfo/Asia/Bahrain
+pytz/zoneinfo/Asia/Baku
+pytz/zoneinfo/Asia/Bangkok
+pytz/zoneinfo/Asia/Beirut
+pytz/zoneinfo/Asia/Bishkek
+pytz/zoneinfo/Asia/Brunei
+pytz/zoneinfo/Asia/Calcutta
+pytz/zoneinfo/Asia/Chita
+pytz/zoneinfo/Asia/Choibalsan
+pytz/zoneinfo/Asia/Chongqing
+pytz/zoneinfo/Asia/Chungking
+pytz/zoneinfo/Asia/Colombo
+pytz/zoneinfo/Asia/Dacca
+pytz/zoneinfo/Asia/Damascus
+pytz/zoneinfo/Asia/Dhaka
+pytz/zoneinfo/Asia/Dili
+pytz/zoneinfo/Asia/Dubai
+pytz/zoneinfo/Asia/Dushanbe
+pytz/zoneinfo/Asia/Gaza
+pytz/zoneinfo/Asia/Harbin
+pytz/zoneinfo/Asia/Hebron
+pytz/zoneinfo/Asia/Ho_Chi_Minh
+pytz/zoneinfo/Asia/Hong_Kong
+pytz/zoneinfo/Asia/Hovd
+pytz/zoneinfo/Asia/Irkutsk
+pytz/zoneinfo/Asia/Istanbul
+pytz/zoneinfo/Asia/Jakarta
+pytz/zoneinfo/Asia/Jayapura
+pytz/zoneinfo/Asia/Jerusalem
+pytz/zoneinfo/Asia/Kabul
+pytz/zoneinfo/Asia/Kamchatka
+pytz/zoneinfo/Asia/Karachi
+pytz/zoneinfo/Asia/Kashgar
+pytz/zoneinfo/Asia/Kathmandu
+pytz/zoneinfo/Asia/Katmandu
+pytz/zoneinfo/Asia/Khandyga
+pytz/zoneinfo/Asia/Kolkata
+pytz/zoneinfo/Asia/Krasnoyarsk
+pytz/zoneinfo/Asia/Kuala_Lumpur
+pytz/zoneinfo/Asia/Kuching
+pytz/zoneinfo/Asia/Kuwait
+pytz/zoneinfo/Asia/Macao
+pytz/zoneinfo/Asia/Macau
+pytz/zoneinfo/Asia/Magadan
+pytz/zoneinfo/Asia/Makassar
+pytz/zoneinfo/Asia/Manila
+pytz/zoneinfo/Asia/Muscat
+pytz/zoneinfo/Asia/Nicosia
+pytz/zoneinfo/Asia/Novokuznetsk
+pytz/zoneinfo/Asia/Novosibirsk
+pytz/zoneinfo/Asia/Omsk
+pytz/zoneinfo/Asia/Oral
+pytz/zoneinfo/Asia/Phnom_Penh
+pytz/zoneinfo/Asia/Pontianak
+pytz/zoneinfo/Asia/Pyongyang
+pytz/zoneinfo/Asia/Qatar
+pytz/zoneinfo/Asia/Qyzylorda
+pytz/zoneinfo/Asia/Rangoon
+pytz/zoneinfo/Asia/Riyadh
+pytz/zoneinfo/Asia/Saigon
+pytz/zoneinfo/Asia/Sakhalin
+pytz/zoneinfo/Asia/Samarkand
+pytz/zoneinfo/Asia/Seoul
+pytz/zoneinfo/Asia/Shanghai
+pytz/zoneinfo/Asia/Singapore
+pytz/zoneinfo/Asia/Srednekolymsk
+pytz/zoneinfo/Asia/Taipei
+pytz/zoneinfo/Asia/Tashkent
+pytz/zoneinfo/Asia/Tbilisi
+pytz/zoneinfo/Asia/Tehran
+pytz/zoneinfo/Asia/Tel_Aviv
+pytz/zoneinfo/Asia/Thimbu
+pytz/zoneinfo/Asia/Thimphu
+pytz/zoneinfo/Asia/Tokyo
+pytz/zoneinfo/Asia/Ujung_Pandang
+pytz/zoneinfo/Asia/Ulaanbaatar
+pytz/zoneinfo/Asia/Ulan_Bator
+pytz/zoneinfo/Asia/Urumqi
+pytz/zoneinfo/Asia/Ust-Nera
+pytz/zoneinfo/Asia/Vientiane
+pytz/zoneinfo/Asia/Vladivostok
+pytz/zoneinfo/Asia/Yakutsk
+pytz/zoneinfo/Asia/Yekaterinburg
+pytz/zoneinfo/Asia/Yerevan
+pytz/zoneinfo/Atlantic/Azores
+pytz/zoneinfo/Atlantic/Bermuda
+pytz/zoneinfo/Atlantic/Canary
+pytz/zoneinfo/Atlantic/Cape_Verde
+pytz/zoneinfo/Atlantic/Faeroe
+pytz/zoneinfo/Atlantic/Faroe
+pytz/zoneinfo/Atlantic/Jan_Mayen
+pytz/zoneinfo/Atlantic/Madeira
+pytz/zoneinfo/Atlantic/Reykjavik
+pytz/zoneinfo/Atlantic/South_Georgia
+pytz/zoneinfo/Atlantic/St_Helena
+pytz/zoneinfo/Atlantic/Stanley
+pytz/zoneinfo/Australia/ACT
+pytz/zoneinfo/Australia/Adelaide
+pytz/zoneinfo/Australia/Brisbane
+pytz/zoneinfo/Australia/Broken_Hill
+pytz/zoneinfo/Australia/Canberra
+pytz/zoneinfo/Australia/Currie
+pytz/zoneinfo/Australia/Darwin
+pytz/zoneinfo/Australia/Eucla
+pytz/zoneinfo/Australia/Hobart
+pytz/zoneinfo/Australia/LHI
+pytz/zoneinfo/Australia/Lindeman
+pytz/zoneinfo/Australia/Lord_Howe
+pytz/zoneinfo/Australia/Melbourne
+pytz/zoneinfo/Australia/NSW
+pytz/zoneinfo/Australia/North
+pytz/zoneinfo/Australia/Perth
+pytz/zoneinfo/Australia/Queensland
+pytz/zoneinfo/Australia/South
+pytz/zoneinfo/Australia/Sydney
+pytz/zoneinfo/Australia/Tasmania
+pytz/zoneinfo/Australia/Victoria
+pytz/zoneinfo/Australia/West
+pytz/zoneinfo/Australia/Yancowinna
+pytz/zoneinfo/Brazil/Acre
+pytz/zoneinfo/Brazil/DeNoronha
+pytz/zoneinfo/Brazil/East
+pytz/zoneinfo/Brazil/West
+pytz/zoneinfo/Canada/Atlantic
+pytz/zoneinfo/Canada/Central
+pytz/zoneinfo/Canada/East-Saskatchewan
+pytz/zoneinfo/Canada/Eastern
+pytz/zoneinfo/Canada/Mountain
+pytz/zoneinfo/Canada/Newfoundland
+pytz/zoneinfo/Canada/Pacific
+pytz/zoneinfo/Canada/Saskatchewan
+pytz/zoneinfo/Canada/Yukon
+pytz/zoneinfo/Chile/Continental
+pytz/zoneinfo/Chile/EasterIsland
+pytz/zoneinfo/Etc/GMT
+pytz/zoneinfo/Etc/GMT+0
+pytz/zoneinfo/Etc/GMT+1
+pytz/zoneinfo/Etc/GMT+10
+pytz/zoneinfo/Etc/GMT+11
+pytz/zoneinfo/Etc/GMT+12
+pytz/zoneinfo/Etc/GMT+2
+pytz/zoneinfo/Etc/GMT+3
+pytz/zoneinfo/Etc/GMT+4
+pytz/zoneinfo/Etc/GMT+5
+pytz/zoneinfo/Etc/GMT+6
+pytz/zoneinfo/Etc/GMT+7
+pytz/zoneinfo/Etc/GMT+8
+pytz/zoneinfo/Etc/GMT+9
+pytz/zoneinfo/Etc/GMT-0
+pytz/zoneinfo/Etc/GMT-1
+pytz/zoneinfo/Etc/GMT-10
+pytz/zoneinfo/Etc/GMT-11
+pytz/zoneinfo/Etc/GMT-12
+pytz/zoneinfo/Etc/GMT-13
+pytz/zoneinfo/Etc/GMT-14
+pytz/zoneinfo/Etc/GMT-2
+pytz/zoneinfo/Etc/GMT-3
+pytz/zoneinfo/Etc/GMT-4
+pytz/zoneinfo/Etc/GMT-5
+pytz/zoneinfo/Etc/GMT-6
+pytz/zoneinfo/Etc/GMT-7
+pytz/zoneinfo/Etc/GMT-8
+pytz/zoneinfo/Etc/GMT-9
+pytz/zoneinfo/Etc/GMT0
+pytz/zoneinfo/Etc/Greenwich
+pytz/zoneinfo/Etc/UCT
+pytz/zoneinfo/Etc/UTC
+pytz/zoneinfo/Etc/Universal
+pytz/zoneinfo/Etc/Zulu
+pytz/zoneinfo/Europe/Amsterdam
+pytz/zoneinfo/Europe/Andorra
+pytz/zoneinfo/Europe/Athens
+pytz/zoneinfo/Europe/Belfast
+pytz/zoneinfo/Europe/Belgrade
+pytz/zoneinfo/Europe/Berlin
+pytz/zoneinfo/Europe/Bratislava
+pytz/zoneinfo/Europe/Brussels
+pytz/zoneinfo/Europe/Bucharest
+pytz/zoneinfo/Europe/Budapest
+pytz/zoneinfo/Europe/Busingen
+pytz/zoneinfo/Europe/Chisinau
+pytz/zoneinfo/Europe/Copenhagen
+pytz/zoneinfo/Europe/Dublin
+pytz/zoneinfo/Europe/Gibraltar
+pytz/zoneinfo/Europe/Guernsey
+pytz/zoneinfo/Europe/Helsinki
+pytz/zoneinfo/Europe/Isle_of_Man
+pytz/zoneinfo/Europe/Istanbul
+pytz/zoneinfo/Europe/Jersey
+pytz/zoneinfo/Europe/Kaliningrad
+pytz/zoneinfo/Europe/Kiev
+pytz/zoneinfo/Europe/Lisbon
+pytz/zoneinfo/Europe/Ljubljana
+pytz/zoneinfo/Europe/London
+pytz/zoneinfo/Europe/Luxembourg
+pytz/zoneinfo/Europe/Madrid
+pytz/zoneinfo/Europe/Malta
+pytz/zoneinfo/Europe/Mariehamn
+pytz/zoneinfo/Europe/Minsk
+pytz/zoneinfo/Europe/Monaco
+pytz/zoneinfo/Europe/Moscow
+pytz/zoneinfo/Europe/Nicosia
+pytz/zoneinfo/Europe/Oslo
+pytz/zoneinfo/Europe/Paris
+pytz/zoneinfo/Europe/Podgorica
+pytz/zoneinfo/Europe/Prague
+pytz/zoneinfo/Europe/Riga
+pytz/zoneinfo/Europe/Rome
+pytz/zoneinfo/Europe/Samara
+pytz/zoneinfo/Europe/San_Marino
+pytz/zoneinfo/Europe/Sarajevo
+pytz/zoneinfo/Europe/Simferopol
+pytz/zoneinfo/Europe/Skopje
+pytz/zoneinfo/Europe/Sofia
+pytz/zoneinfo/Europe/Stockholm
+pytz/zoneinfo/Europe/Tallinn
+pytz/zoneinfo/Europe/Tirane
+pytz/zoneinfo/Europe/Tiraspol
+pytz/zoneinfo/Europe/Uzhgorod
+pytz/zoneinfo/Europe/Vaduz
+pytz/zoneinfo/Europe/Vatican
+pytz/zoneinfo/Europe/Vienna
+pytz/zoneinfo/Europe/Vilnius
+pytz/zoneinfo/Europe/Volgograd
+pytz/zoneinfo/Europe/Warsaw
+pytz/zoneinfo/Europe/Zagreb
+pytz/zoneinfo/Europe/Zaporozhye
+pytz/zoneinfo/Europe/Zurich
+pytz/zoneinfo/Indian/Antananarivo
+pytz/zoneinfo/Indian/Chagos
+pytz/zoneinfo/Indian/Christmas
+pytz/zoneinfo/Indian/Cocos
+pytz/zoneinfo/Indian/Comoro
+pytz/zoneinfo/Indian/Kerguelen
+pytz/zoneinfo/Indian/Mahe
+pytz/zoneinfo/Indian/Maldives
+pytz/zoneinfo/Indian/Mauritius
+pytz/zoneinfo/Indian/Mayotte
+pytz/zoneinfo/Indian/Reunion
+pytz/zoneinfo/Mexico/BajaNorte
+pytz/zoneinfo/Mexico/BajaSur
+pytz/zoneinfo/Mexico/General
+pytz/zoneinfo/Pacific/Apia
+pytz/zoneinfo/Pacific/Auckland
+pytz/zoneinfo/Pacific/Bougainville
+pytz/zoneinfo/Pacific/Chatham
+pytz/zoneinfo/Pacific/Chuuk
+pytz/zoneinfo/Pacific/Easter
+pytz/zoneinfo/Pacific/Efate
+pytz/zoneinfo/Pacific/Enderbury
+pytz/zoneinfo/Pacific/Fakaofo
+pytz/zoneinfo/Pacific/Fiji
+pytz/zoneinfo/Pacific/Funafuti
+pytz/zoneinfo/Pacific/Galapagos
+pytz/zoneinfo/Pacific/Gambier
+pytz/zoneinfo/Pacific/Guadalcanal
+pytz/zoneinfo/Pacific/Guam
+pytz/zoneinfo/Pacific/Honolulu
+pytz/zoneinfo/Pacific/Johnston
+pytz/zoneinfo/Pacific/Kiritimati
+pytz/zoneinfo/Pacific/Kosrae
+pytz/zoneinfo/Pacific/Kwajalein
+pytz/zoneinfo/Pacific/Majuro
+pytz/zoneinfo/Pacific/Marquesas
+pytz/zoneinfo/Pacific/Midway
+pytz/zoneinfo/Pacific/Nauru
+pytz/zoneinfo/Pacific/Niue
+pytz/zoneinfo/Pacific/Norfolk
+pytz/zoneinfo/Pacific/Noumea
+pytz/zoneinfo/Pacific/Pago_Pago
+pytz/zoneinfo/Pacific/Palau
+pytz/zoneinfo/Pacific/Pitcairn
+pytz/zoneinfo/Pacific/Pohnpei
+pytz/zoneinfo/Pacific/Ponape
+pytz/zoneinfo/Pacific/Port_Moresby
+pytz/zoneinfo/Pacific/Rarotonga
+pytz/zoneinfo/Pacific/Saipan
+pytz/zoneinfo/Pacific/Samoa
+pytz/zoneinfo/Pacific/Tahiti
+pytz/zoneinfo/Pacific/Tarawa
+pytz/zoneinfo/Pacific/Tongatapu
+pytz/zoneinfo/Pacific/Truk
+pytz/zoneinfo/Pacific/Wake
+pytz/zoneinfo/Pacific/Wallis
+pytz/zoneinfo/Pacific/Yap
+pytz/zoneinfo/US/Alaska
+pytz/zoneinfo/US/Aleutian
+pytz/zoneinfo/US/Arizona
+pytz/zoneinfo/US/Central
+pytz/zoneinfo/US/East-Indiana
+pytz/zoneinfo/US/Eastern
+pytz/zoneinfo/US/Hawaii
+pytz/zoneinfo/US/Indiana-Starke
+pytz/zoneinfo/US/Michigan
+pytz/zoneinfo/US/Mountain
+pytz/zoneinfo/US/Pacific
+pytz/zoneinfo/US/Pacific-New
+pytz/zoneinfo/US/Samoa \ No newline at end of file
diff --git a/pytz.egg-info/dependency_links.txt b/pytz.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/pytz.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/pytz.egg-info/top_level.txt b/pytz.egg-info/top_level.txt
new file mode 100644
index 0000000..af44f19
--- /dev/null
+++ b/pytz.egg-info/top_level.txt
@@ -0,0 +1 @@
+pytz
diff --git a/pytz.egg-info/zip-safe b/pytz.egg-info/zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/pytz.egg-info/zip-safe
@@ -0,0 +1 @@
+
diff --git a/pytz/__init__.py b/pytz/__init__.py
new file mode 100644
index 0000000..e5cbe56
--- /dev/null
+++ b/pytz/__init__.py
@@ -0,0 +1,1513 @@
+'''
+datetime.tzinfo timezone definitions generated from the
+Olson timezone database:
+
+ ftp://elsie.nci.nih.gov/pub/tz*.tar.gz
+
+See the datetime section of the Python Library Reference for information
+on how to use these modules.
+'''
+
+# The Olson database is updated several times a year.
+OLSON_VERSION = '2014j'
+VERSION = '2014.10' # Switching to pip compatible version numbering.
+__version__ = VERSION
+
+OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling
+
+__all__ = [
+ 'timezone', 'utc', 'country_timezones', 'country_names',
+ 'AmbiguousTimeError', 'InvalidTimeError',
+ 'NonExistentTimeError', 'UnknownTimeZoneError',
+ 'all_timezones', 'all_timezones_set',
+ 'common_timezones', 'common_timezones_set',
+ ]
+
+import sys, datetime, os.path, gettext
+
+try:
+ from pkg_resources import resource_stream
+except ImportError:
+ resource_stream = None
+
+from pytz.exceptions import AmbiguousTimeError
+from pytz.exceptions import InvalidTimeError
+from pytz.exceptions import NonExistentTimeError
+from pytz.exceptions import UnknownTimeZoneError
+from pytz.lazy import LazyDict, LazyList, LazySet
+from pytz.tzinfo import unpickler
+from pytz.tzfile import build_tzinfo, _byte_string
+
+
+try:
+ unicode
+
+except NameError: # Python 3.x
+
+ # Python 3.x doesn't have unicode(), making writing code
+ # for Python 2.3 and Python 3.x a pain.
+ unicode = str
+
+ def ascii(s):
+ r"""
+ >>> ascii('Hello')
+ 'Hello'
+ >>> ascii('\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL
+ Traceback (most recent call last):
+ ...
+ UnicodeEncodeError: ...
+ """
+ s.encode('US-ASCII') # Raise an exception if not ASCII
+ return s # But return the original string - not a byte string.
+
+else: # Python 2.x
+
+ def ascii(s):
+ r"""
+ >>> ascii('Hello')
+ 'Hello'
+ >>> ascii(u'Hello')
+ 'Hello'
+ >>> ascii(u'\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL
+ Traceback (most recent call last):
+ ...
+ UnicodeEncodeError: ...
+ """
+ return s.encode('US-ASCII')
+
+
+def open_resource(name):
+ """Open a resource from the zoneinfo subdir for reading.
+
+ Uses the pkg_resources module if available and no standard file
+ found at the calculated location.
+ """
+ name_parts = name.lstrip('/').split('/')
+ for part in name_parts:
+ if part == os.path.pardir or os.path.sep in part:
+ raise ValueError('Bad path segment: %r' % part)
+ filename = os.path.join(os.path.dirname(__file__),
+ 'zoneinfo', *name_parts)
+ if not os.path.exists(filename) and resource_stream is not None:
+ # http://bugs.launchpad.net/bugs/383171 - we avoid using this
+ # unless absolutely necessary to help when a broken version of
+ # pkg_resources is installed.
+ return resource_stream(__name__, 'zoneinfo/' + name)
+ return open(filename, 'rb')
+
+
+def resource_exists(name):
+ """Return true if the given resource exists"""
+ try:
+ open_resource(name).close()
+ return True
+ except IOError:
+ return False
+
+
+# Enable this when we get some translations?
+# We want an i18n API that is useful to programs using Python's gettext
+# module, as well as the Zope3 i18n package. Perhaps we should just provide
+# the POT file and translations, and leave it up to callers to make use
+# of them.
+#
+# t = gettext.translation(
+# 'pytz', os.path.join(os.path.dirname(__file__), 'locales'),
+# fallback=True
+# )
+# def _(timezone_name):
+# """Translate a timezone name using the current locale, returning Unicode"""
+# return t.ugettext(timezone_name)
+
+
+_tzinfo_cache = {}
+
+def timezone(zone):
+ r''' Return a datetime.tzinfo implementation for the given timezone
+
+ >>> from datetime import datetime, timedelta
+ >>> utc = timezone('UTC')
+ >>> eastern = timezone('US/Eastern')
+ >>> eastern.zone
+ 'US/Eastern'
+ >>> timezone(unicode('US/Eastern')) is eastern
+ True
+ >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
+ >>> loc_dt = utc_dt.astimezone(eastern)
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:00:00 EST (-0500)'
+ >>> (loc_dt - timedelta(minutes=10)).strftime(fmt)
+ '2002-10-27 00:50:00 EST (-0500)'
+ >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt)
+ '2002-10-27 01:50:00 EDT (-0400)'
+ >>> (loc_dt + timedelta(minutes=10)).strftime(fmt)
+ '2002-10-27 01:10:00 EST (-0500)'
+
+ Raises UnknownTimeZoneError if passed an unknown zone.
+
+ >>> try:
+ ... timezone('Asia/Shangri-La')
+ ... except UnknownTimeZoneError:
+ ... print('Unknown')
+ Unknown
+
+ >>> try:
+ ... timezone(unicode('\N{TRADE MARK SIGN}'))
+ ... except UnknownTimeZoneError:
+ ... print('Unknown')
+ Unknown
+
+ '''
+ if zone.upper() == 'UTC':
+ return utc
+
+ try:
+ zone = ascii(zone)
+ except UnicodeEncodeError:
+ # All valid timezones are ASCII
+ raise UnknownTimeZoneError(zone)
+
+ zone = _unmunge_zone(zone)
+ if zone not in _tzinfo_cache:
+ if zone in all_timezones_set:
+ fp = open_resource(zone)
+ try:
+ _tzinfo_cache[zone] = build_tzinfo(zone, fp)
+ finally:
+ fp.close()
+ else:
+ raise UnknownTimeZoneError(zone)
+
+ return _tzinfo_cache[zone]
+
+
+def _unmunge_zone(zone):
+ """Undo the time zone name munging done by older versions of pytz."""
+ return zone.replace('_plus_', '+').replace('_minus_', '-')
+
+
+ZERO = datetime.timedelta(0)
+HOUR = datetime.timedelta(hours=1)
+
+
+class UTC(datetime.tzinfo):
+ """UTC
+
+ Optimized UTC implementation. It unpickles using the single module global
+ instance defined beneath this class declaration.
+ """
+ zone = "UTC"
+
+ _utcoffset = ZERO
+ _dst = ZERO
+ _tzname = zone
+
+ def fromutc(self, dt):
+ if dt.tzinfo is None:
+ return self.localize(dt)
+ return super(utc.__class__, self).fromutc(dt)
+
+ def utcoffset(self, dt):
+ return ZERO
+
+ def tzname(self, dt):
+ return "UTC"
+
+ def dst(self, dt):
+ return ZERO
+
+ def __reduce__(self):
+ return _UTC, ()
+
+ def localize(self, dt, is_dst=False):
+ '''Convert naive time to local time'''
+ if dt.tzinfo is not None:
+ raise ValueError('Not naive datetime (tzinfo is already set)')
+ return dt.replace(tzinfo=self)
+
+ def normalize(self, dt, is_dst=False):
+ '''Correct the timezone information on the given datetime'''
+ if dt.tzinfo is self:
+ return dt
+ if dt.tzinfo is None:
+ raise ValueError('Naive time - no tzinfo set')
+ return dt.astimezone(self)
+
+ def __repr__(self):
+ return "<UTC>"
+
+ def __str__(self):
+ return "UTC"
+
+
+UTC = utc = UTC() # UTC is a singleton
+
+
+def _UTC():
+ """Factory function for utc unpickling.
+
+ Makes sure that unpickling a utc instance always returns the same
+ module global.
+
+ These examples belong in the UTC class above, but it is obscured; or in
+ the README.txt, but we are not depending on Python 2.4 so integrating
+ the README.txt examples with the unit tests is not trivial.
+
+ >>> import datetime, pickle
+ >>> dt = datetime.datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
+ >>> naive = dt.replace(tzinfo=None)
+ >>> p = pickle.dumps(dt, 1)
+ >>> naive_p = pickle.dumps(naive, 1)
+ >>> len(p) - len(naive_p)
+ 17
+ >>> new = pickle.loads(p)
+ >>> new == dt
+ True
+ >>> new is dt
+ False
+ >>> new.tzinfo is dt.tzinfo
+ True
+ >>> utc is UTC is timezone('UTC')
+ True
+ >>> utc is timezone('GMT')
+ False
+ """
+ return utc
+_UTC.__safe_for_unpickling__ = True
+
+
+def _p(*args):
+ """Factory function for unpickling pytz tzinfo instances.
+
+ Just a wrapper around tzinfo.unpickler to save a few bytes in each pickle
+ by shortening the path.
+ """
+ return unpickler(*args)
+_p.__safe_for_unpickling__ = True
+
+
+
+class _CountryTimezoneDict(LazyDict):
+ """Map ISO 3166 country code to a list of timezone names commonly used
+ in that country.
+
+ iso3166_code is the two letter code used to identify the country.
+
+ >>> def print_list(list_of_strings):
+ ... 'We use a helper so doctests work under Python 2.3 -> 3.x'
+ ... for s in list_of_strings:
+ ... print(s)
+
+ >>> print_list(country_timezones['nz'])
+ Pacific/Auckland
+ Pacific/Chatham
+ >>> print_list(country_timezones['ch'])
+ Europe/Zurich
+ >>> print_list(country_timezones['CH'])
+ Europe/Zurich
+ >>> print_list(country_timezones[unicode('ch')])
+ Europe/Zurich
+ >>> print_list(country_timezones['XXX'])
+ Traceback (most recent call last):
+ ...
+ KeyError: 'XXX'
+
+ Previously, this information was exposed as a function rather than a
+ dictionary. This is still supported::
+
+ >>> print_list(country_timezones('nz'))
+ Pacific/Auckland
+ Pacific/Chatham
+ """
+ def __call__(self, iso3166_code):
+ """Backwards compatibility."""
+ return self[iso3166_code]
+
+ def _fill(self):
+ data = {}
+ zone_tab = open_resource('zone.tab')
+ try:
+ for line in zone_tab:
+ line = line.decode('US-ASCII')
+ if line.startswith('#'):
+ continue
+ code, coordinates, zone = line.split(None, 4)[:3]
+ if zone not in all_timezones_set:
+ continue
+ try:
+ data[code].append(zone)
+ except KeyError:
+ data[code] = [zone]
+ self.data = data
+ finally:
+ zone_tab.close()
+
+country_timezones = _CountryTimezoneDict()
+
+
+class _CountryNameDict(LazyDict):
+ '''Dictionary proving ISO3166 code -> English name.
+
+ >>> print(country_names['au'])
+ Australia
+ '''
+ def _fill(self):
+ data = {}
+ zone_tab = open_resource('iso3166.tab')
+ try:
+ for line in zone_tab.readlines():
+ line = line.decode('US-ASCII')
+ if line.startswith('#'):
+ continue
+ code, name = line.split(None, 1)
+ data[code] = name.strip()
+ self.data = data
+ finally:
+ zone_tab.close()
+
+country_names = _CountryNameDict()
+
+
+# Time-zone info based solely on fixed offsets
+
+class _FixedOffset(datetime.tzinfo):
+
+ zone = None # to match the standard pytz API
+
+ def __init__(self, minutes):
+ if abs(minutes) >= 1440:
+ raise ValueError("absolute offset is too large", minutes)
+ self._minutes = minutes
+ self._offset = datetime.timedelta(minutes=minutes)
+
+ def utcoffset(self, dt):
+ return self._offset
+
+ def __reduce__(self):
+ return FixedOffset, (self._minutes, )
+
+ def dst(self, dt):
+ return ZERO
+
+ def tzname(self, dt):
+ return None
+
+ def __repr__(self):
+ return 'pytz.FixedOffset(%d)' % self._minutes
+
+ def localize(self, dt, is_dst=False):
+ '''Convert naive time to local time'''
+ if dt.tzinfo is not None:
+ raise ValueError('Not naive datetime (tzinfo is already set)')
+ return dt.replace(tzinfo=self)
+
+ def normalize(self, dt, is_dst=False):
+ '''Correct the timezone information on the given datetime'''
+ if dt.tzinfo is None:
+ raise ValueError('Naive time - no tzinfo set')
+ return dt.replace(tzinfo=self)
+
+
+def FixedOffset(offset, _tzinfos = {}):
+ """return a fixed-offset timezone based off a number of minutes.
+
+ >>> one = FixedOffset(-330)
+ >>> one
+ pytz.FixedOffset(-330)
+ >>> one.utcoffset(datetime.datetime.now())
+ datetime.timedelta(-1, 66600)
+ >>> one.dst(datetime.datetime.now())
+ datetime.timedelta(0)
+
+ >>> two = FixedOffset(1380)
+ >>> two
+ pytz.FixedOffset(1380)
+ >>> two.utcoffset(datetime.datetime.now())
+ datetime.timedelta(0, 82800)
+ >>> two.dst(datetime.datetime.now())
+ datetime.timedelta(0)
+
+ The datetime.timedelta must be between the range of -1 and 1 day,
+ non-inclusive.
+
+ >>> FixedOffset(1440)
+ Traceback (most recent call last):
+ ...
+ ValueError: ('absolute offset is too large', 1440)
+
+ >>> FixedOffset(-1440)
+ Traceback (most recent call last):
+ ...
+ ValueError: ('absolute offset is too large', -1440)
+
+ An offset of 0 is special-cased to return UTC.
+
+ >>> FixedOffset(0) is UTC
+ True
+
+ There should always be only one instance of a FixedOffset per timedelta.
+ This should be true for multiple creation calls.
+
+ >>> FixedOffset(-330) is one
+ True
+ >>> FixedOffset(1380) is two
+ True
+
+ It should also be true for pickling.
+
+ >>> import pickle
+ >>> pickle.loads(pickle.dumps(one)) is one
+ True
+ >>> pickle.loads(pickle.dumps(two)) is two
+ True
+ """
+ if offset == 0:
+ return UTC
+
+ info = _tzinfos.get(offset)
+ if info is None:
+ # We haven't seen this one before. we need to save it.
+
+ # Use setdefault to avoid a race condition and make sure we have
+ # only one
+ info = _tzinfos.setdefault(offset, _FixedOffset(offset))
+
+ return info
+
+FixedOffset.__safe_for_unpickling__ = True
+
+
+def _test():
+ import doctest, os, sys
+ sys.path.insert(0, os.pardir)
+ import pytz
+ return doctest.testmod(pytz)
+
+if __name__ == '__main__':
+ _test()
+
+all_timezones = \
+['Africa/Abidjan',
+ 'Africa/Accra',
+ 'Africa/Addis_Ababa',
+ 'Africa/Algiers',
+ 'Africa/Asmara',
+ 'Africa/Asmera',
+ 'Africa/Bamako',
+ 'Africa/Bangui',
+ 'Africa/Banjul',
+ 'Africa/Bissau',
+ 'Africa/Blantyre',
+ 'Africa/Brazzaville',
+ 'Africa/Bujumbura',
+ 'Africa/Cairo',
+ 'Africa/Casablanca',
+ 'Africa/Ceuta',
+ 'Africa/Conakry',
+ 'Africa/Dakar',
+ 'Africa/Dar_es_Salaam',
+ 'Africa/Djibouti',
+ 'Africa/Douala',
+ 'Africa/El_Aaiun',
+ 'Africa/Freetown',
+ 'Africa/Gaborone',
+ 'Africa/Harare',
+ 'Africa/Johannesburg',
+ 'Africa/Juba',
+ 'Africa/Kampala',
+ 'Africa/Khartoum',
+ 'Africa/Kigali',
+ 'Africa/Kinshasa',
+ 'Africa/Lagos',
+ 'Africa/Libreville',
+ 'Africa/Lome',
+ 'Africa/Luanda',
+ 'Africa/Lubumbashi',
+ 'Africa/Lusaka',
+ 'Africa/Malabo',
+ 'Africa/Maputo',
+ 'Africa/Maseru',
+ 'Africa/Mbabane',
+ 'Africa/Mogadishu',
+ 'Africa/Monrovia',
+ 'Africa/Nairobi',
+ 'Africa/Ndjamena',
+ 'Africa/Niamey',
+ 'Africa/Nouakchott',
+ 'Africa/Ouagadougou',
+ 'Africa/Porto-Novo',
+ 'Africa/Sao_Tome',
+ 'Africa/Timbuktu',
+ 'Africa/Tripoli',
+ 'Africa/Tunis',
+ 'Africa/Windhoek',
+ 'America/Adak',
+ 'America/Anchorage',
+ 'America/Anguilla',
+ 'America/Antigua',
+ 'America/Araguaina',
+ 'America/Argentina/Buenos_Aires',
+ 'America/Argentina/Catamarca',
+ 'America/Argentina/ComodRivadavia',
+ 'America/Argentina/Cordoba',
+ 'America/Argentina/Jujuy',
+ 'America/Argentina/La_Rioja',
+ 'America/Argentina/Mendoza',
+ 'America/Argentina/Rio_Gallegos',
+ 'America/Argentina/Salta',
+ 'America/Argentina/San_Juan',
+ 'America/Argentina/San_Luis',
+ 'America/Argentina/Tucuman',
+ 'America/Argentina/Ushuaia',
+ 'America/Aruba',
+ 'America/Asuncion',
+ 'America/Atikokan',
+ 'America/Atka',
+ 'America/Bahia',
+ 'America/Bahia_Banderas',
+ 'America/Barbados',
+ 'America/Belem',
+ 'America/Belize',
+ 'America/Blanc-Sablon',
+ 'America/Boa_Vista',
+ 'America/Bogota',
+ 'America/Boise',
+ 'America/Buenos_Aires',
+ 'America/Cambridge_Bay',
+ 'America/Campo_Grande',
+ 'America/Cancun',
+ 'America/Caracas',
+ 'America/Catamarca',
+ 'America/Cayenne',
+ 'America/Cayman',
+ 'America/Chicago',
+ 'America/Chihuahua',
+ 'America/Coral_Harbour',
+ 'America/Cordoba',
+ 'America/Costa_Rica',
+ 'America/Creston',
+ 'America/Cuiaba',
+ 'America/Curacao',
+ 'America/Danmarkshavn',
+ 'America/Dawson',
+ 'America/Dawson_Creek',
+ 'America/Denver',
+ 'America/Detroit',
+ 'America/Dominica',
+ 'America/Edmonton',
+ 'America/Eirunepe',
+ 'America/El_Salvador',
+ 'America/Ensenada',
+ 'America/Fort_Wayne',
+ 'America/Fortaleza',
+ 'America/Glace_Bay',
+ 'America/Godthab',
+ 'America/Goose_Bay',
+ 'America/Grand_Turk',
+ 'America/Grenada',
+ 'America/Guadeloupe',
+ 'America/Guatemala',
+ 'America/Guayaquil',
+ 'America/Guyana',
+ 'America/Halifax',
+ 'America/Havana',
+ 'America/Hermosillo',
+ 'America/Indiana/Indianapolis',
+ 'America/Indiana/Knox',
+ 'America/Indiana/Marengo',
+ 'America/Indiana/Petersburg',
+ 'America/Indiana/Tell_City',
+ 'America/Indiana/Vevay',
+ 'America/Indiana/Vincennes',
+ 'America/Indiana/Winamac',
+ 'America/Indianapolis',
+ 'America/Inuvik',
+ 'America/Iqaluit',
+ 'America/Jamaica',
+ 'America/Jujuy',
+ 'America/Juneau',
+ 'America/Kentucky/Louisville',
+ 'America/Kentucky/Monticello',
+ 'America/Knox_IN',
+ 'America/Kralendijk',
+ 'America/La_Paz',
+ 'America/Lima',
+ 'America/Los_Angeles',
+ 'America/Louisville',
+ 'America/Lower_Princes',
+ 'America/Maceio',
+ 'America/Managua',
+ 'America/Manaus',
+ 'America/Marigot',
+ 'America/Martinique',
+ 'America/Matamoros',
+ 'America/Mazatlan',
+ 'America/Mendoza',
+ 'America/Menominee',
+ 'America/Merida',
+ 'America/Metlakatla',
+ 'America/Mexico_City',
+ 'America/Miquelon',
+ 'America/Moncton',
+ 'America/Monterrey',
+ 'America/Montevideo',
+ 'America/Montreal',
+ 'America/Montserrat',
+ 'America/Nassau',
+ 'America/New_York',
+ 'America/Nipigon',
+ 'America/Nome',
+ 'America/Noronha',
+ 'America/North_Dakota/Beulah',
+ 'America/North_Dakota/Center',
+ 'America/North_Dakota/New_Salem',
+ 'America/Ojinaga',
+ 'America/Panama',
+ 'America/Pangnirtung',
+ 'America/Paramaribo',
+ 'America/Phoenix',
+ 'America/Port-au-Prince',
+ 'America/Port_of_Spain',
+ 'America/Porto_Acre',
+ 'America/Porto_Velho',
+ 'America/Puerto_Rico',
+ 'America/Rainy_River',
+ 'America/Rankin_Inlet',
+ 'America/Recife',
+ 'America/Regina',
+ 'America/Resolute',
+ 'America/Rio_Branco',
+ 'America/Rosario',
+ 'America/Santa_Isabel',
+ 'America/Santarem',
+ 'America/Santiago',
+ 'America/Santo_Domingo',
+ 'America/Sao_Paulo',
+ 'America/Scoresbysund',
+ 'America/Shiprock',
+ 'America/Sitka',
+ 'America/St_Barthelemy',
+ 'America/St_Johns',
+ 'America/St_Kitts',
+ 'America/St_Lucia',
+ 'America/St_Thomas',
+ 'America/St_Vincent',
+ 'America/Swift_Current',
+ 'America/Tegucigalpa',
+ 'America/Thule',
+ 'America/Thunder_Bay',
+ 'America/Tijuana',
+ 'America/Toronto',
+ 'America/Tortola',
+ 'America/Vancouver',
+ 'America/Virgin',
+ 'America/Whitehorse',
+ 'America/Winnipeg',
+ 'America/Yakutat',
+ 'America/Yellowknife',
+ 'Antarctica/Casey',
+ 'Antarctica/Davis',
+ 'Antarctica/DumontDUrville',
+ 'Antarctica/Macquarie',
+ 'Antarctica/Mawson',
+ 'Antarctica/McMurdo',
+ 'Antarctica/Palmer',
+ 'Antarctica/Rothera',
+ 'Antarctica/South_Pole',
+ 'Antarctica/Syowa',
+ 'Antarctica/Troll',
+ 'Antarctica/Vostok',
+ 'Arctic/Longyearbyen',
+ 'Asia/Aden',
+ 'Asia/Almaty',
+ 'Asia/Amman',
+ 'Asia/Anadyr',
+ 'Asia/Aqtau',
+ 'Asia/Aqtobe',
+ 'Asia/Ashgabat',
+ 'Asia/Ashkhabad',
+ 'Asia/Baghdad',
+ 'Asia/Bahrain',
+ 'Asia/Baku',
+ 'Asia/Bangkok',
+ 'Asia/Beirut',
+ 'Asia/Bishkek',
+ 'Asia/Brunei',
+ 'Asia/Calcutta',
+ 'Asia/Chita',
+ 'Asia/Choibalsan',
+ 'Asia/Chongqing',
+ 'Asia/Chungking',
+ 'Asia/Colombo',
+ 'Asia/Dacca',
+ 'Asia/Damascus',
+ 'Asia/Dhaka',
+ 'Asia/Dili',
+ 'Asia/Dubai',
+ 'Asia/Dushanbe',
+ 'Asia/Gaza',
+ 'Asia/Harbin',
+ 'Asia/Hebron',
+ 'Asia/Ho_Chi_Minh',
+ 'Asia/Hong_Kong',
+ 'Asia/Hovd',
+ 'Asia/Irkutsk',
+ 'Asia/Istanbul',
+ 'Asia/Jakarta',
+ 'Asia/Jayapura',
+ 'Asia/Jerusalem',
+ 'Asia/Kabul',
+ 'Asia/Kamchatka',
+ 'Asia/Karachi',
+ 'Asia/Kashgar',
+ 'Asia/Kathmandu',
+ 'Asia/Katmandu',
+ 'Asia/Khandyga',
+ 'Asia/Kolkata',
+ 'Asia/Krasnoyarsk',
+ 'Asia/Kuala_Lumpur',
+ 'Asia/Kuching',
+ 'Asia/Kuwait',
+ 'Asia/Macao',
+ 'Asia/Macau',
+ 'Asia/Magadan',
+ 'Asia/Makassar',
+ 'Asia/Manila',
+ 'Asia/Muscat',
+ 'Asia/Nicosia',
+ 'Asia/Novokuznetsk',
+ 'Asia/Novosibirsk',
+ 'Asia/Omsk',
+ 'Asia/Oral',
+ 'Asia/Phnom_Penh',
+ 'Asia/Pontianak',
+ 'Asia/Pyongyang',
+ 'Asia/Qatar',
+ 'Asia/Qyzylorda',
+ 'Asia/Rangoon',
+ 'Asia/Riyadh',
+ 'Asia/Saigon',
+ 'Asia/Sakhalin',
+ 'Asia/Samarkand',
+ 'Asia/Seoul',
+ 'Asia/Shanghai',
+ 'Asia/Singapore',
+ 'Asia/Srednekolymsk',
+ 'Asia/Taipei',
+ 'Asia/Tashkent',
+ 'Asia/Tbilisi',
+ 'Asia/Tehran',
+ 'Asia/Tel_Aviv',
+ 'Asia/Thimbu',
+ 'Asia/Thimphu',
+ 'Asia/Tokyo',
+ 'Asia/Ujung_Pandang',
+ 'Asia/Ulaanbaatar',
+ 'Asia/Ulan_Bator',
+ 'Asia/Urumqi',
+ 'Asia/Ust-Nera',
+ 'Asia/Vientiane',
+ 'Asia/Vladivostok',
+ 'Asia/Yakutsk',
+ 'Asia/Yekaterinburg',
+ 'Asia/Yerevan',
+ 'Atlantic/Azores',
+ 'Atlantic/Bermuda',
+ 'Atlantic/Canary',
+ 'Atlantic/Cape_Verde',
+ 'Atlantic/Faeroe',
+ 'Atlantic/Faroe',
+ 'Atlantic/Jan_Mayen',
+ 'Atlantic/Madeira',
+ 'Atlantic/Reykjavik',
+ 'Atlantic/South_Georgia',
+ 'Atlantic/St_Helena',
+ 'Atlantic/Stanley',
+ 'Australia/ACT',
+ 'Australia/Adelaide',
+ 'Australia/Brisbane',
+ 'Australia/Broken_Hill',
+ 'Australia/Canberra',
+ 'Australia/Currie',
+ 'Australia/Darwin',
+ 'Australia/Eucla',
+ 'Australia/Hobart',
+ 'Australia/LHI',
+ 'Australia/Lindeman',
+ 'Australia/Lord_Howe',
+ 'Australia/Melbourne',
+ 'Australia/NSW',
+ 'Australia/North',
+ 'Australia/Perth',
+ 'Australia/Queensland',
+ 'Australia/South',
+ 'Australia/Sydney',
+ 'Australia/Tasmania',
+ 'Australia/Victoria',
+ 'Australia/West',
+ 'Australia/Yancowinna',
+ 'Brazil/Acre',
+ 'Brazil/DeNoronha',
+ 'Brazil/East',
+ 'Brazil/West',
+ 'CET',
+ 'CST6CDT',
+ 'Canada/Atlantic',
+ 'Canada/Central',
+ 'Canada/East-Saskatchewan',
+ 'Canada/Eastern',
+ 'Canada/Mountain',
+ 'Canada/Newfoundland',
+ 'Canada/Pacific',
+ 'Canada/Saskatchewan',
+ 'Canada/Yukon',
+ 'Chile/Continental',
+ 'Chile/EasterIsland',
+ 'Cuba',
+ 'EET',
+ 'EST',
+ 'EST5EDT',
+ 'Egypt',
+ 'Eire',
+ 'Etc/GMT',
+ 'Etc/GMT+0',
+ '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-0',
+ '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/GMT0',
+ 'Etc/Greenwich',
+ 'Etc/UCT',
+ 'Etc/UTC',
+ 'Etc/Universal',
+ 'Etc/Zulu',
+ 'Europe/Amsterdam',
+ 'Europe/Andorra',
+ 'Europe/Athens',
+ 'Europe/Belfast',
+ 'Europe/Belgrade',
+ 'Europe/Berlin',
+ 'Europe/Bratislava',
+ 'Europe/Brussels',
+ 'Europe/Bucharest',
+ 'Europe/Budapest',
+ 'Europe/Busingen',
+ 'Europe/Chisinau',
+ 'Europe/Copenhagen',
+ 'Europe/Dublin',
+ 'Europe/Gibraltar',
+ 'Europe/Guernsey',
+ 'Europe/Helsinki',
+ 'Europe/Isle_of_Man',
+ 'Europe/Istanbul',
+ 'Europe/Jersey',
+ 'Europe/Kaliningrad',
+ 'Europe/Kiev',
+ 'Europe/Lisbon',
+ 'Europe/Ljubljana',
+ 'Europe/London',
+ 'Europe/Luxembourg',
+ 'Europe/Madrid',
+ 'Europe/Malta',
+ 'Europe/Mariehamn',
+ 'Europe/Minsk',
+ 'Europe/Monaco',
+ 'Europe/Moscow',
+ 'Europe/Nicosia',
+ 'Europe/Oslo',
+ 'Europe/Paris',
+ 'Europe/Podgorica',
+ 'Europe/Prague',
+ 'Europe/Riga',
+ 'Europe/Rome',
+ 'Europe/Samara',
+ 'Europe/San_Marino',
+ 'Europe/Sarajevo',
+ 'Europe/Simferopol',
+ 'Europe/Skopje',
+ 'Europe/Sofia',
+ 'Europe/Stockholm',
+ 'Europe/Tallinn',
+ 'Europe/Tirane',
+ 'Europe/Tiraspol',
+ 'Europe/Uzhgorod',
+ 'Europe/Vaduz',
+ 'Europe/Vatican',
+ 'Europe/Vienna',
+ 'Europe/Vilnius',
+ 'Europe/Volgograd',
+ 'Europe/Warsaw',
+ 'Europe/Zagreb',
+ 'Europe/Zaporozhye',
+ 'Europe/Zurich',
+ 'GB',
+ 'GB-Eire',
+ 'GMT',
+ 'GMT+0',
+ 'GMT-0',
+ 'GMT0',
+ 'Greenwich',
+ 'HST',
+ 'Hongkong',
+ 'Iceland',
+ 'Indian/Antananarivo',
+ 'Indian/Chagos',
+ 'Indian/Christmas',
+ 'Indian/Cocos',
+ 'Indian/Comoro',
+ 'Indian/Kerguelen',
+ 'Indian/Mahe',
+ 'Indian/Maldives',
+ 'Indian/Mauritius',
+ 'Indian/Mayotte',
+ 'Indian/Reunion',
+ 'Iran',
+ 'Israel',
+ 'Jamaica',
+ 'Japan',
+ 'Kwajalein',
+ 'Libya',
+ 'MET',
+ 'MST',
+ 'MST7MDT',
+ 'Mexico/BajaNorte',
+ 'Mexico/BajaSur',
+ 'Mexico/General',
+ 'NZ',
+ 'NZ-CHAT',
+ 'Navajo',
+ 'PRC',
+ 'PST8PDT',
+ 'Pacific/Apia',
+ 'Pacific/Auckland',
+ 'Pacific/Bougainville',
+ 'Pacific/Chatham',
+ 'Pacific/Chuuk',
+ 'Pacific/Easter',
+ 'Pacific/Efate',
+ 'Pacific/Enderbury',
+ 'Pacific/Fakaofo',
+ 'Pacific/Fiji',
+ 'Pacific/Funafuti',
+ 'Pacific/Galapagos',
+ 'Pacific/Gambier',
+ 'Pacific/Guadalcanal',
+ 'Pacific/Guam',
+ 'Pacific/Honolulu',
+ 'Pacific/Johnston',
+ 'Pacific/Kiritimati',
+ 'Pacific/Kosrae',
+ 'Pacific/Kwajalein',
+ 'Pacific/Majuro',
+ 'Pacific/Marquesas',
+ 'Pacific/Midway',
+ 'Pacific/Nauru',
+ 'Pacific/Niue',
+ 'Pacific/Norfolk',
+ 'Pacific/Noumea',
+ 'Pacific/Pago_Pago',
+ 'Pacific/Palau',
+ 'Pacific/Pitcairn',
+ 'Pacific/Pohnpei',
+ 'Pacific/Ponape',
+ 'Pacific/Port_Moresby',
+ 'Pacific/Rarotonga',
+ 'Pacific/Saipan',
+ 'Pacific/Samoa',
+ 'Pacific/Tahiti',
+ 'Pacific/Tarawa',
+ 'Pacific/Tongatapu',
+ 'Pacific/Truk',
+ 'Pacific/Wake',
+ 'Pacific/Wallis',
+ 'Pacific/Yap',
+ 'Poland',
+ 'Portugal',
+ 'ROC',
+ 'ROK',
+ 'Singapore',
+ 'Turkey',
+ 'UCT',
+ 'US/Alaska',
+ 'US/Aleutian',
+ 'US/Arizona',
+ 'US/Central',
+ 'US/East-Indiana',
+ 'US/Eastern',
+ 'US/Hawaii',
+ 'US/Indiana-Starke',
+ 'US/Michigan',
+ 'US/Mountain',
+ 'US/Pacific',
+ 'US/Pacific-New',
+ 'US/Samoa',
+ 'UTC',
+ 'Universal',
+ 'W-SU',
+ 'WET',
+ 'Zulu']
+all_timezones = LazyList(
+ tz for tz in all_timezones if resource_exists(tz))
+
+all_timezones_set = LazySet(all_timezones)
+common_timezones = \
+['Africa/Abidjan',
+ 'Africa/Accra',
+ 'Africa/Addis_Ababa',
+ 'Africa/Algiers',
+ 'Africa/Asmara',
+ 'Africa/Bamako',
+ 'Africa/Bangui',
+ 'Africa/Banjul',
+ 'Africa/Bissau',
+ 'Africa/Blantyre',
+ 'Africa/Brazzaville',
+ 'Africa/Bujumbura',
+ 'Africa/Cairo',
+ 'Africa/Casablanca',
+ 'Africa/Ceuta',
+ 'Africa/Conakry',
+ 'Africa/Dakar',
+ 'Africa/Dar_es_Salaam',
+ 'Africa/Djibouti',
+ 'Africa/Douala',
+ 'Africa/El_Aaiun',
+ 'Africa/Freetown',
+ 'Africa/Gaborone',
+ 'Africa/Harare',
+ 'Africa/Johannesburg',
+ 'Africa/Juba',
+ 'Africa/Kampala',
+ 'Africa/Khartoum',
+ 'Africa/Kigali',
+ 'Africa/Kinshasa',
+ 'Africa/Lagos',
+ 'Africa/Libreville',
+ 'Africa/Lome',
+ 'Africa/Luanda',
+ 'Africa/Lubumbashi',
+ 'Africa/Lusaka',
+ 'Africa/Malabo',
+ 'Africa/Maputo',
+ 'Africa/Maseru',
+ 'Africa/Mbabane',
+ 'Africa/Mogadishu',
+ 'Africa/Monrovia',
+ 'Africa/Nairobi',
+ 'Africa/Ndjamena',
+ 'Africa/Niamey',
+ 'Africa/Nouakchott',
+ 'Africa/Ouagadougou',
+ 'Africa/Porto-Novo',
+ 'Africa/Sao_Tome',
+ 'Africa/Tripoli',
+ 'Africa/Tunis',
+ 'Africa/Windhoek',
+ 'America/Adak',
+ 'America/Anchorage',
+ 'America/Anguilla',
+ 'America/Antigua',
+ 'America/Araguaina',
+ 'America/Argentina/Buenos_Aires',
+ 'America/Argentina/Catamarca',
+ 'America/Argentina/Cordoba',
+ 'America/Argentina/Jujuy',
+ 'America/Argentina/La_Rioja',
+ 'America/Argentina/Mendoza',
+ 'America/Argentina/Rio_Gallegos',
+ 'America/Argentina/Salta',
+ 'America/Argentina/San_Juan',
+ 'America/Argentina/San_Luis',
+ 'America/Argentina/Tucuman',
+ 'America/Argentina/Ushuaia',
+ 'America/Aruba',
+ 'America/Asuncion',
+ 'America/Atikokan',
+ 'America/Bahia',
+ 'America/Bahia_Banderas',
+ 'America/Barbados',
+ 'America/Belem',
+ 'America/Belize',
+ 'America/Blanc-Sablon',
+ 'America/Boa_Vista',
+ 'America/Bogota',
+ 'America/Boise',
+ 'America/Cambridge_Bay',
+ 'America/Campo_Grande',
+ 'America/Cancun',
+ 'America/Caracas',
+ 'America/Cayenne',
+ 'America/Cayman',
+ 'America/Chicago',
+ 'America/Chihuahua',
+ 'America/Costa_Rica',
+ 'America/Creston',
+ 'America/Cuiaba',
+ 'America/Curacao',
+ 'America/Danmarkshavn',
+ 'America/Dawson',
+ 'America/Dawson_Creek',
+ 'America/Denver',
+ 'America/Detroit',
+ 'America/Dominica',
+ 'America/Edmonton',
+ 'America/Eirunepe',
+ 'America/El_Salvador',
+ 'America/Fortaleza',
+ 'America/Glace_Bay',
+ 'America/Godthab',
+ 'America/Goose_Bay',
+ 'America/Grand_Turk',
+ 'America/Grenada',
+ 'America/Guadeloupe',
+ 'America/Guatemala',
+ 'America/Guayaquil',
+ 'America/Guyana',
+ 'America/Halifax',
+ 'America/Havana',
+ 'America/Hermosillo',
+ 'America/Indiana/Indianapolis',
+ 'America/Indiana/Knox',
+ 'America/Indiana/Marengo',
+ 'America/Indiana/Petersburg',
+ 'America/Indiana/Tell_City',
+ 'America/Indiana/Vevay',
+ 'America/Indiana/Vincennes',
+ 'America/Indiana/Winamac',
+ 'America/Inuvik',
+ 'America/Iqaluit',
+ 'America/Jamaica',
+ 'America/Juneau',
+ 'America/Kentucky/Louisville',
+ 'America/Kentucky/Monticello',
+ 'America/Kralendijk',
+ 'America/La_Paz',
+ 'America/Lima',
+ 'America/Los_Angeles',
+ 'America/Lower_Princes',
+ 'America/Maceio',
+ 'America/Managua',
+ 'America/Manaus',
+ 'America/Marigot',
+ 'America/Martinique',
+ 'America/Matamoros',
+ 'America/Mazatlan',
+ 'America/Menominee',
+ 'America/Merida',
+ 'America/Metlakatla',
+ 'America/Mexico_City',
+ 'America/Miquelon',
+ 'America/Moncton',
+ 'America/Monterrey',
+ 'America/Montevideo',
+ 'America/Montreal',
+ 'America/Montserrat',
+ 'America/Nassau',
+ 'America/New_York',
+ 'America/Nipigon',
+ 'America/Nome',
+ 'America/Noronha',
+ 'America/North_Dakota/Beulah',
+ 'America/North_Dakota/Center',
+ 'America/North_Dakota/New_Salem',
+ 'America/Ojinaga',
+ 'America/Panama',
+ 'America/Pangnirtung',
+ 'America/Paramaribo',
+ 'America/Phoenix',
+ 'America/Port-au-Prince',
+ 'America/Port_of_Spain',
+ 'America/Porto_Velho',
+ 'America/Puerto_Rico',
+ 'America/Rainy_River',
+ 'America/Rankin_Inlet',
+ 'America/Recife',
+ 'America/Regina',
+ 'America/Resolute',
+ 'America/Rio_Branco',
+ 'America/Santa_Isabel',
+ 'America/Santarem',
+ 'America/Santiago',
+ 'America/Santo_Domingo',
+ 'America/Sao_Paulo',
+ 'America/Scoresbysund',
+ 'America/Sitka',
+ 'America/St_Barthelemy',
+ 'America/St_Johns',
+ 'America/St_Kitts',
+ 'America/St_Lucia',
+ 'America/St_Thomas',
+ 'America/St_Vincent',
+ 'America/Swift_Current',
+ 'America/Tegucigalpa',
+ 'America/Thule',
+ 'America/Thunder_Bay',
+ 'America/Tijuana',
+ 'America/Toronto',
+ 'America/Tortola',
+ 'America/Vancouver',
+ 'America/Whitehorse',
+ 'America/Winnipeg',
+ 'America/Yakutat',
+ 'America/Yellowknife',
+ 'Antarctica/Casey',
+ 'Antarctica/Davis',
+ 'Antarctica/DumontDUrville',
+ 'Antarctica/Macquarie',
+ 'Antarctica/Mawson',
+ 'Antarctica/McMurdo',
+ 'Antarctica/Palmer',
+ 'Antarctica/Rothera',
+ 'Antarctica/Syowa',
+ 'Antarctica/Troll',
+ 'Antarctica/Vostok',
+ 'Arctic/Longyearbyen',
+ 'Asia/Aden',
+ 'Asia/Almaty',
+ 'Asia/Amman',
+ 'Asia/Anadyr',
+ 'Asia/Aqtau',
+ 'Asia/Aqtobe',
+ 'Asia/Ashgabat',
+ 'Asia/Baghdad',
+ 'Asia/Bahrain',
+ 'Asia/Baku',
+ 'Asia/Bangkok',
+ 'Asia/Beirut',
+ 'Asia/Bishkek',
+ 'Asia/Brunei',
+ 'Asia/Chita',
+ 'Asia/Choibalsan',
+ 'Asia/Colombo',
+ 'Asia/Damascus',
+ 'Asia/Dhaka',
+ 'Asia/Dili',
+ 'Asia/Dubai',
+ 'Asia/Dushanbe',
+ 'Asia/Gaza',
+ 'Asia/Hebron',
+ 'Asia/Ho_Chi_Minh',
+ 'Asia/Hong_Kong',
+ 'Asia/Hovd',
+ 'Asia/Irkutsk',
+ 'Asia/Jakarta',
+ 'Asia/Jayapura',
+ 'Asia/Jerusalem',
+ 'Asia/Kabul',
+ 'Asia/Kamchatka',
+ 'Asia/Karachi',
+ 'Asia/Kathmandu',
+ 'Asia/Khandyga',
+ 'Asia/Kolkata',
+ 'Asia/Krasnoyarsk',
+ 'Asia/Kuala_Lumpur',
+ 'Asia/Kuching',
+ 'Asia/Kuwait',
+ 'Asia/Macau',
+ 'Asia/Magadan',
+ 'Asia/Makassar',
+ 'Asia/Manila',
+ 'Asia/Muscat',
+ 'Asia/Nicosia',
+ 'Asia/Novokuznetsk',
+ 'Asia/Novosibirsk',
+ 'Asia/Omsk',
+ 'Asia/Oral',
+ 'Asia/Phnom_Penh',
+ 'Asia/Pontianak',
+ 'Asia/Pyongyang',
+ 'Asia/Qatar',
+ 'Asia/Qyzylorda',
+ 'Asia/Rangoon',
+ 'Asia/Riyadh',
+ 'Asia/Sakhalin',
+ 'Asia/Samarkand',
+ 'Asia/Seoul',
+ 'Asia/Shanghai',
+ 'Asia/Singapore',
+ 'Asia/Srednekolymsk',
+ 'Asia/Taipei',
+ 'Asia/Tashkent',
+ 'Asia/Tbilisi',
+ 'Asia/Tehran',
+ 'Asia/Thimphu',
+ 'Asia/Tokyo',
+ 'Asia/Ulaanbaatar',
+ 'Asia/Urumqi',
+ 'Asia/Ust-Nera',
+ 'Asia/Vientiane',
+ 'Asia/Vladivostok',
+ 'Asia/Yakutsk',
+ 'Asia/Yekaterinburg',
+ 'Asia/Yerevan',
+ 'Atlantic/Azores',
+ 'Atlantic/Bermuda',
+ 'Atlantic/Canary',
+ 'Atlantic/Cape_Verde',
+ 'Atlantic/Faroe',
+ 'Atlantic/Madeira',
+ 'Atlantic/Reykjavik',
+ 'Atlantic/South_Georgia',
+ 'Atlantic/St_Helena',
+ 'Atlantic/Stanley',
+ 'Australia/Adelaide',
+ 'Australia/Brisbane',
+ 'Australia/Broken_Hill',
+ 'Australia/Currie',
+ 'Australia/Darwin',
+ 'Australia/Eucla',
+ 'Australia/Hobart',
+ 'Australia/Lindeman',
+ 'Australia/Lord_Howe',
+ 'Australia/Melbourne',
+ 'Australia/Perth',
+ 'Australia/Sydney',
+ 'Canada/Atlantic',
+ 'Canada/Central',
+ 'Canada/Eastern',
+ 'Canada/Mountain',
+ 'Canada/Newfoundland',
+ 'Canada/Pacific',
+ 'Europe/Amsterdam',
+ 'Europe/Andorra',
+ 'Europe/Athens',
+ 'Europe/Belgrade',
+ 'Europe/Berlin',
+ 'Europe/Bratislava',
+ 'Europe/Brussels',
+ 'Europe/Bucharest',
+ 'Europe/Budapest',
+ 'Europe/Busingen',
+ 'Europe/Chisinau',
+ 'Europe/Copenhagen',
+ 'Europe/Dublin',
+ 'Europe/Gibraltar',
+ 'Europe/Guernsey',
+ 'Europe/Helsinki',
+ 'Europe/Isle_of_Man',
+ 'Europe/Istanbul',
+ 'Europe/Jersey',
+ 'Europe/Kaliningrad',
+ 'Europe/Kiev',
+ 'Europe/Lisbon',
+ 'Europe/Ljubljana',
+ 'Europe/London',
+ 'Europe/Luxembourg',
+ 'Europe/Madrid',
+ 'Europe/Malta',
+ 'Europe/Mariehamn',
+ 'Europe/Minsk',
+ 'Europe/Monaco',
+ 'Europe/Moscow',
+ 'Europe/Oslo',
+ 'Europe/Paris',
+ 'Europe/Podgorica',
+ 'Europe/Prague',
+ 'Europe/Riga',
+ 'Europe/Rome',
+ 'Europe/Samara',
+ 'Europe/San_Marino',
+ 'Europe/Sarajevo',
+ 'Europe/Simferopol',
+ 'Europe/Skopje',
+ 'Europe/Sofia',
+ 'Europe/Stockholm',
+ 'Europe/Tallinn',
+ 'Europe/Tirane',
+ 'Europe/Uzhgorod',
+ 'Europe/Vaduz',
+ 'Europe/Vatican',
+ 'Europe/Vienna',
+ 'Europe/Vilnius',
+ 'Europe/Volgograd',
+ 'Europe/Warsaw',
+ 'Europe/Zagreb',
+ 'Europe/Zaporozhye',
+ 'Europe/Zurich',
+ 'GMT',
+ 'Indian/Antananarivo',
+ 'Indian/Chagos',
+ 'Indian/Christmas',
+ 'Indian/Cocos',
+ 'Indian/Comoro',
+ 'Indian/Kerguelen',
+ 'Indian/Mahe',
+ 'Indian/Maldives',
+ 'Indian/Mauritius',
+ 'Indian/Mayotte',
+ 'Indian/Reunion',
+ 'Pacific/Apia',
+ 'Pacific/Auckland',
+ 'Pacific/Bougainville',
+ 'Pacific/Chatham',
+ 'Pacific/Chuuk',
+ 'Pacific/Easter',
+ 'Pacific/Efate',
+ 'Pacific/Enderbury',
+ 'Pacific/Fakaofo',
+ 'Pacific/Fiji',
+ 'Pacific/Funafuti',
+ 'Pacific/Galapagos',
+ 'Pacific/Gambier',
+ 'Pacific/Guadalcanal',
+ 'Pacific/Guam',
+ 'Pacific/Honolulu',
+ 'Pacific/Johnston',
+ 'Pacific/Kiritimati',
+ 'Pacific/Kosrae',
+ 'Pacific/Kwajalein',
+ 'Pacific/Majuro',
+ 'Pacific/Marquesas',
+ 'Pacific/Midway',
+ 'Pacific/Nauru',
+ 'Pacific/Niue',
+ 'Pacific/Norfolk',
+ 'Pacific/Noumea',
+ 'Pacific/Pago_Pago',
+ 'Pacific/Palau',
+ 'Pacific/Pitcairn',
+ 'Pacific/Pohnpei',
+ 'Pacific/Port_Moresby',
+ 'Pacific/Rarotonga',
+ 'Pacific/Saipan',
+ 'Pacific/Tahiti',
+ 'Pacific/Tarawa',
+ 'Pacific/Tongatapu',
+ 'Pacific/Wake',
+ 'Pacific/Wallis',
+ 'US/Alaska',
+ 'US/Arizona',
+ 'US/Central',
+ 'US/Eastern',
+ 'US/Hawaii',
+ 'US/Mountain',
+ 'US/Pacific',
+ 'UTC']
+common_timezones = LazyList(
+ tz for tz in common_timezones if tz in all_timezones)
+
+common_timezones_set = LazySet(common_timezones)
diff --git a/pytz/exceptions.py b/pytz/exceptions.py
new file mode 100644
index 0000000..0376108
--- /dev/null
+++ b/pytz/exceptions.py
@@ -0,0 +1,48 @@
+'''
+Custom exceptions raised by pytz.
+'''
+
+__all__ = [
+ 'UnknownTimeZoneError', 'InvalidTimeError', 'AmbiguousTimeError',
+ 'NonExistentTimeError',
+ ]
+
+
+class UnknownTimeZoneError(KeyError):
+ '''Exception raised when pytz is passed an unknown timezone.
+
+ >>> isinstance(UnknownTimeZoneError(), LookupError)
+ True
+
+ This class is actually a subclass of KeyError to provide backwards
+ compatibility with code relying on the undocumented behavior of earlier
+ pytz releases.
+
+ >>> isinstance(UnknownTimeZoneError(), KeyError)
+ True
+ '''
+ pass
+
+
+class InvalidTimeError(Exception):
+ '''Base class for invalid time exceptions.'''
+
+
+class AmbiguousTimeError(InvalidTimeError):
+ '''Exception raised when attempting to create an ambiguous wallclock time.
+
+ At the end of a DST transition period, a particular wallclock time will
+ occur twice (once before the clocks are set back, once after). Both
+ possibilities may be correct, unless further information is supplied.
+
+ See DstTzInfo.normalize() for more info
+ '''
+
+
+class NonExistentTimeError(InvalidTimeError):
+ '''Exception raised when attempting to create a wallclock time that
+ cannot exist.
+
+ At the start of a DST transition period, the wallclock time jumps forward.
+ The instants jumped over never occur.
+ '''
diff --git a/pytz/lazy.py b/pytz/lazy.py
new file mode 100644
index 0000000..f7fc597
--- /dev/null
+++ b/pytz/lazy.py
@@ -0,0 +1,168 @@
+from threading import RLock
+try:
+ from UserDict import DictMixin
+except ImportError:
+ from collections import Mapping as DictMixin
+
+
+# With lazy loading, we might end up with multiple threads triggering
+# it at the same time. We need a lock.
+_fill_lock = RLock()
+
+
+class LazyDict(DictMixin):
+ """Dictionary populated on first use."""
+ data = None
+ def __getitem__(self, key):
+ if self.data is None:
+ _fill_lock.acquire()
+ try:
+ if self.data is None:
+ self._fill()
+ finally:
+ _fill_lock.release()
+ return self.data[key.upper()]
+
+ def __contains__(self, key):
+ if self.data is None:
+ _fill_lock.acquire()
+ try:
+ if self.data is None:
+ self._fill()
+ finally:
+ _fill_lock.release()
+ return key in self.data
+
+ def __iter__(self):
+ if self.data is None:
+ _fill_lock.acquire()
+ try:
+ if self.data is None:
+ self._fill()
+ finally:
+ _fill_lock.release()
+ return iter(self.data)
+
+ def __len__(self):
+ if self.data is None:
+ _fill_lock.acquire()
+ try:
+ if self.data is None:
+ self._fill()
+ finally:
+ _fill_lock.release()
+ return len(self.data)
+
+ def keys(self):
+ if self.data is None:
+ _fill_lock.acquire()
+ try:
+ if self.data is None:
+ self._fill()
+ finally:
+ _fill_lock.release()
+ return self.data.keys()
+
+
+class LazyList(list):
+ """List populated on first use."""
+
+ _props = [
+ '__str__', '__repr__', '__unicode__',
+ '__hash__', '__sizeof__', '__cmp__',
+ '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
+ 'append', 'count', 'index', 'extend', 'insert', 'pop', 'remove',
+ 'reverse', 'sort', '__add__', '__radd__', '__iadd__', '__mul__',
+ '__rmul__', '__imul__', '__contains__', '__len__', '__nonzero__',
+ '__getitem__', '__setitem__', '__delitem__', '__iter__',
+ '__reversed__', '__getslice__', '__setslice__', '__delslice__']
+
+ def __new__(cls, fill_iter=None):
+
+ if fill_iter is None:
+ return list()
+
+ # We need a new class as we will be dynamically messing with its
+ # methods.
+ class LazyList(list):
+ pass
+
+ fill_iter = [fill_iter]
+
+ def lazy(name):
+ def _lazy(self, *args, **kw):
+ _fill_lock.acquire()
+ try:
+ if len(fill_iter) > 0:
+ list.extend(self, fill_iter.pop())
+ for method_name in cls._props:
+ delattr(LazyList, method_name)
+ finally:
+ _fill_lock.release()
+ return getattr(list, name)(self, *args, **kw)
+ return _lazy
+
+ for name in cls._props:
+ setattr(LazyList, name, lazy(name))
+
+ new_list = LazyList()
+ return new_list
+
+# Not all versions of Python declare the same magic methods.
+# Filter out properties that don't exist in this version of Python
+# from the list.
+LazyList._props = [prop for prop in LazyList._props if hasattr(list, prop)]
+
+
+class LazySet(set):
+ """Set populated on first use."""
+
+ _props = (
+ '__str__', '__repr__', '__unicode__',
+ '__hash__', '__sizeof__', '__cmp__',
+ '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
+ '__contains__', '__len__', '__nonzero__',
+ '__getitem__', '__setitem__', '__delitem__', '__iter__',
+ '__sub__', '__and__', '__xor__', '__or__',
+ '__rsub__', '__rand__', '__rxor__', '__ror__',
+ '__isub__', '__iand__', '__ixor__', '__ior__',
+ 'add', 'clear', 'copy', 'difference', 'difference_update',
+ 'discard', 'intersection', 'intersection_update', 'isdisjoint',
+ 'issubset', 'issuperset', 'pop', 'remove',
+ 'symmetric_difference', 'symmetric_difference_update',
+ 'union', 'update')
+
+ def __new__(cls, fill_iter=None):
+
+ if fill_iter is None:
+ return set()
+
+ class LazySet(set):
+ pass
+
+ fill_iter = [fill_iter]
+
+ def lazy(name):
+ def _lazy(self, *args, **kw):
+ _fill_lock.acquire()
+ try:
+ if len(fill_iter) > 0:
+ for i in fill_iter.pop():
+ set.add(self, i)
+ for method_name in cls._props:
+ delattr(LazySet, method_name)
+ finally:
+ _fill_lock.release()
+ return getattr(set, name)(self, *args, **kw)
+ return _lazy
+
+ for name in cls._props:
+ setattr(LazySet, name, lazy(name))
+
+ new_set = LazySet()
+ return new_set
+
+# Not all versions of Python declare the same magic methods.
+# Filter out properties that don't exist in this version of Python
+# from the list.
+LazySet._props = [prop for prop in LazySet._props if hasattr(set, prop)]
diff --git a/pytz/reference.py b/pytz/reference.py
new file mode 100644
index 0000000..3dda13e
--- /dev/null
+++ b/pytz/reference.py
@@ -0,0 +1,127 @@
+'''
+Reference tzinfo implementations from the Python docs.
+Used for testing against as they are only correct for the years
+1987 to 2006. Do not use these for real code.
+'''
+
+from datetime import tzinfo, timedelta, datetime
+from pytz import utc, UTC, HOUR, ZERO
+
+# A class building tzinfo objects for fixed-offset time zones.
+# Note that FixedOffset(0, "UTC") is a different way to build a
+# UTC tzinfo object.
+
+class FixedOffset(tzinfo):
+ """Fixed offset in minutes east from UTC."""
+
+ def __init__(self, offset, name):
+ self.__offset = timedelta(minutes = offset)
+ self.__name = name
+
+ def utcoffset(self, dt):
+ return self.__offset
+
+ def tzname(self, dt):
+ return self.__name
+
+ def dst(self, dt):
+ return ZERO
+
+# A class capturing the platform's idea of local time.
+
+import time as _time
+
+STDOFFSET = timedelta(seconds = -_time.timezone)
+if _time.daylight:
+ DSTOFFSET = timedelta(seconds = -_time.altzone)
+else:
+ DSTOFFSET = STDOFFSET
+
+DSTDIFF = DSTOFFSET - STDOFFSET
+
+class LocalTimezone(tzinfo):
+
+ def utcoffset(self, dt):
+ if self._isdst(dt):
+ return DSTOFFSET
+ else:
+ return STDOFFSET
+
+ def dst(self, dt):
+ if self._isdst(dt):
+ return DSTDIFF
+ else:
+ return ZERO
+
+ def tzname(self, dt):
+ return _time.tzname[self._isdst(dt)]
+
+ def _isdst(self, dt):
+ tt = (dt.year, dt.month, dt.day,
+ dt.hour, dt.minute, dt.second,
+ dt.weekday(), 0, -1)
+ stamp = _time.mktime(tt)
+ tt = _time.localtime(stamp)
+ return tt.tm_isdst > 0
+
+Local = LocalTimezone()
+
+# A complete implementation of current DST rules for major US time zones.
+
+def first_sunday_on_or_after(dt):
+ days_to_go = 6 - dt.weekday()
+ if days_to_go:
+ dt += timedelta(days_to_go)
+ return dt
+
+# In the US, DST starts at 2am (standard time) on the first Sunday in April.
+DSTSTART = datetime(1, 4, 1, 2)
+# and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct.
+# which is the first Sunday on or after Oct 25.
+DSTEND = datetime(1, 10, 25, 1)
+
+class USTimeZone(tzinfo):
+
+ def __init__(self, hours, reprname, stdname, dstname):
+ self.stdoffset = timedelta(hours=hours)
+ self.reprname = reprname
+ self.stdname = stdname
+ self.dstname = dstname
+
+ def __repr__(self):
+ return self.reprname
+
+ def tzname(self, dt):
+ if self.dst(dt):
+ return self.dstname
+ else:
+ return self.stdname
+
+ def utcoffset(self, dt):
+ return self.stdoffset + self.dst(dt)
+
+ def dst(self, dt):
+ if dt is None or dt.tzinfo is None:
+ # An exception may be sensible here, in one or both cases.
+ # It depends on how you want to treat them. The default
+ # fromutc() implementation (called by the default astimezone()
+ # implementation) passes a datetime with dt.tzinfo is self.
+ return ZERO
+ assert dt.tzinfo is self
+
+ # Find first Sunday in April & the last in October.
+ start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year))
+ end = first_sunday_on_or_after(DSTEND.replace(year=dt.year))
+
+ # Can't compare naive to aware objects, so strip the timezone from
+ # dt first.
+ if start <= dt.replace(tzinfo=None) < end:
+ return HOUR
+ else:
+ return ZERO
+
+Eastern = USTimeZone(-5, "Eastern", "EST", "EDT")
+Central = USTimeZone(-6, "Central", "CST", "CDT")
+Mountain = USTimeZone(-7, "Mountain", "MST", "MDT")
+Pacific = USTimeZone(-8, "Pacific", "PST", "PDT")
+
diff --git a/pytz/tests/test_docs.py b/pytz/tests/test_docs.py
new file mode 100644
index 0000000..fb49ec1
--- /dev/null
+++ b/pytz/tests/test_docs.py
@@ -0,0 +1,34 @@
+# -*- coding: ascii -*-
+
+from doctest import DocFileSuite
+import unittest, os.path, sys
+
+THIS_DIR = os.path.dirname(__file__)
+
+README = os.path.join(THIS_DIR, os.pardir, os.pardir, 'README.txt')
+
+
+class DocumentationTestCase(unittest.TestCase):
+ def test_readme_encoding(self):
+ '''Confirm the README.txt is pure ASCII.'''
+ f = open(README, 'rb')
+ try:
+ f.read().decode('US-ASCII')
+ finally:
+ f.close()
+
+
+def test_suite():
+ "For the Z3 test runner"
+ return unittest.TestSuite((
+ DocumentationTestCase('test_readme_encoding'),
+ DocFileSuite(os.path.join(os.pardir, os.pardir, 'README.txt'))))
+
+
+if __name__ == '__main__':
+ sys.path.insert(0, os.path.abspath(os.path.join(
+ THIS_DIR, os.pardir, os.pardir
+ )))
+ unittest.main(defaultTest='test_suite')
+
+
diff --git a/pytz/tests/test_lazy.py b/pytz/tests/test_lazy.py
new file mode 100644
index 0000000..3a4afa6
--- /dev/null
+++ b/pytz/tests/test_lazy.py
@@ -0,0 +1,313 @@
+from operator import *
+import os.path
+import sys
+import unittest
+import warnings
+
+
+if __name__ == '__main__':
+ # Only munge path if invoked as a script. Testrunners should have setup
+ # the paths already
+ sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir)))
+
+
+from pytz.lazy import LazyList, LazySet
+
+
+class LazyListTestCase(unittest.TestCase):
+ initial_data = [3,2,1]
+
+ def setUp(self):
+ self.base = [3, 2, 1]
+ self.lesser = [2, 1, 0]
+ self.greater = [4, 3, 2]
+
+ self.lazy = LazyList(iter(list(self.base)))
+
+ def test_unary_ops(self):
+ unary_ops = [str, repr, len, bool, not_]
+ try:
+ unary_ops.append(unicode)
+ except NameError:
+ pass # unicode no longer exists in Python 3.
+
+ for op in unary_ops:
+ self.assertEqual(
+ op(self.lazy),
+ op(self.base), str(op))
+
+ def test_binary_ops(self):
+ binary_ops = [eq, ge, gt, le, lt, ne, add, concat]
+ try:
+ binary_ops.append(cmp)
+ except NameError:
+ pass # cmp no longer exists in Python 3.
+
+ for op in binary_ops:
+ self.assertEqual(
+ op(self.lazy, self.lazy),
+ op(self.base, self.base), str(op))
+ for other in [self.base, self.lesser, self.greater]:
+ self.assertEqual(
+ op(self.lazy, other),
+ op(self.base, other), '%s %s' % (op, other))
+ self.assertEqual(
+ op(other, self.lazy),
+ op(other, self.base), '%s %s' % (op, other))
+
+ # Multiplication
+ self.assertEqual(self.lazy * 3, self.base * 3)
+ self.assertEqual(3 * self.lazy, 3 * self.base)
+
+ # Contains
+ self.assertTrue(2 in self.lazy)
+ self.assertFalse(42 in self.lazy)
+
+ def test_iadd(self):
+ self.lazy += [1]
+ self.base += [1]
+ self.assertEqual(self.lazy, self.base)
+
+ def test_bool(self):
+ self.assertTrue(bool(self.lazy))
+ self.assertFalse(bool(LazyList()))
+ self.assertFalse(bool(LazyList(iter([]))))
+
+ def test_hash(self):
+ self.assertRaises(TypeError, hash, self.lazy)
+
+ def test_isinstance(self):
+ self.assertTrue(isinstance(self.lazy, list))
+ self.assertFalse(isinstance(self.lazy, tuple))
+
+ def test_callable(self):
+ try:
+ callable
+ except NameError:
+ return # No longer exists with Python 3.
+ self.assertFalse(callable(self.lazy))
+
+ def test_append(self):
+ self.base.append('extra')
+ self.lazy.append('extra')
+ self.assertEqual(self.lazy, self.base)
+
+ def test_count(self):
+ self.assertEqual(self.lazy.count(2), 1)
+
+ def test_index(self):
+ self.assertEqual(self.lazy.index(2), 1)
+
+ def test_extend(self):
+ self.base.extend([6, 7])
+ self.lazy.extend([6, 7])
+ self.assertEqual(self.lazy, self.base)
+
+ def test_insert(self):
+ self.base.insert(0, 'ping')
+ self.lazy.insert(0, 'ping')
+ self.assertEqual(self.lazy, self.base)
+
+ def test_pop(self):
+ self.assertEqual(self.lazy.pop(), self.base.pop())
+ self.assertEqual(self.lazy, self.base)
+
+ def test_remove(self):
+ self.base.remove(2)
+ self.lazy.remove(2)
+ self.assertEqual(self.lazy, self.base)
+
+ def test_reverse(self):
+ self.base.reverse()
+ self.lazy.reverse()
+ self.assertEqual(self.lazy, self.base)
+
+ def test_reversed(self):
+ self.assertEqual(list(reversed(self.lazy)), list(reversed(self.base)))
+
+ def test_sort(self):
+ self.base.sort()
+ self.assertNotEqual(self.lazy, self.base, 'Test data already sorted')
+ self.lazy.sort()
+ self.assertEqual(self.lazy, self.base)
+
+ def test_sorted(self):
+ self.assertEqual(sorted(self.lazy), sorted(self.base))
+
+ def test_getitem(self):
+ for idx in range(-len(self.base), len(self.base)):
+ self.assertEqual(self.lazy[idx], self.base[idx])
+
+ def test_setitem(self):
+ for idx in range(-len(self.base), len(self.base)):
+ self.base[idx] = idx + 1000
+ self.assertNotEqual(self.lazy, self.base)
+ self.lazy[idx] = idx + 1000
+ self.assertEqual(self.lazy, self.base)
+
+ def test_delitem(self):
+ del self.base[0]
+ self.assertNotEqual(self.lazy, self.base)
+ del self.lazy[0]
+ self.assertEqual(self.lazy, self.base)
+
+ del self.base[-2]
+ self.assertNotEqual(self.lazy, self.base)
+ del self.lazy[-2]
+ self.assertEqual(self.lazy, self.base)
+
+ def test_iter(self):
+ self.assertEqual(list(iter(self.lazy)), list(iter(self.base)))
+
+ def test_getslice(self):
+ for i in range(-len(self.base), len(self.base)):
+ for j in range(-len(self.base), len(self.base)):
+ for step in [-1, 1]:
+ self.assertEqual(self.lazy[i:j:step], self.base[i:j:step])
+
+ def test_setslice(self):
+ for i in range(-len(self.base), len(self.base)):
+ for j in range(-len(self.base), len(self.base)):
+ for step in [-1, 1]:
+ replacement = range(0, len(self.base[i:j:step]))
+ self.base[i:j:step] = replacement
+ self.lazy[i:j:step] = replacement
+ self.assertEqual(self.lazy, self.base)
+
+ def test_delslice(self):
+ del self.base[0:1]
+ del self.lazy[0:1]
+ self.assertEqual(self.lazy, self.base)
+
+ del self.base[-1:1:-1]
+ del self.lazy[-1:1:-1]
+ self.assertEqual(self.lazy, self.base)
+
+
+class LazySetTestCase(unittest.TestCase):
+ initial_data = set([3,2,1])
+
+ def setUp(self):
+ self.base = set([3, 2, 1])
+ self.lazy = LazySet(iter(set(self.base)))
+
+ def test_unary_ops(self):
+ # These ops just need to work.
+ unary_ops = [str, repr]
+ try:
+ unary_ops.append(unicode)
+ except NameError:
+ pass # unicode no longer exists in Python 3.
+
+ for op in unary_ops:
+ op(self.lazy) # These ops just need to work.
+
+ # These ops should return identical values as a real set.
+ unary_ops = [len, bool, not_]
+
+ for op in unary_ops:
+ self.assertEqual(
+ op(self.lazy),
+ op(self.base), '%s(lazy) == %r' % (op, op(self.lazy)))
+
+ def test_binary_ops(self):
+ binary_ops = [eq, ge, gt, le, lt, ne, sub, and_, or_, xor]
+ try:
+ binary_ops.append(cmp)
+ except NameError:
+ pass # cmp no longer exists in Python 3.
+
+ for op in binary_ops:
+ self.assertEqual(
+ op(self.lazy, self.lazy),
+ op(self.base, self.base), str(op))
+ self.assertEqual(
+ op(self.lazy, self.base),
+ op(self.base, self.base), str(op))
+ self.assertEqual(
+ op(self.base, self.lazy),
+ op(self.base, self.base), str(op))
+
+ # Contains
+ self.assertTrue(2 in self.lazy)
+ self.assertFalse(42 in self.lazy)
+
+ def test_iops(self):
+ try:
+ iops = [isub, iand, ior, ixor]
+ except NameError:
+ return # Don't exist in older Python versions.
+ for op in iops:
+ # Mutating operators, so make fresh copies.
+ lazy = LazySet(self.base)
+ base = self.base.copy()
+ op(lazy, set([1]))
+ op(base, set([1]))
+ self.assertEqual(lazy, base, str(op))
+
+ def test_bool(self):
+ self.assertTrue(bool(self.lazy))
+ self.assertFalse(bool(LazySet()))
+ self.assertFalse(bool(LazySet(iter([]))))
+
+ def test_hash(self):
+ self.assertRaises(TypeError, hash, self.lazy)
+
+ def test_isinstance(self):
+ self.assertTrue(isinstance(self.lazy, set))
+
+ def test_callable(self):
+ try:
+ callable
+ except NameError:
+ return # No longer exists with Python 3.
+ self.assertFalse(callable(self.lazy))
+
+ def test_add(self):
+ self.base.add('extra')
+ self.lazy.add('extra')
+ self.assertEqual(self.lazy, self.base)
+
+ def test_copy(self):
+ self.assertEqual(self.lazy.copy(), self.base)
+
+ def test_method_ops(self):
+ ops = [
+ 'difference', 'intersection', 'isdisjoint',
+ 'issubset', 'issuperset', 'symmetric_difference', 'union',
+ 'difference_update', 'intersection_update',
+ 'symmetric_difference_update', 'update']
+ for op in ops:
+ if not hasattr(set, op):
+ continue # Not in this version of Python.
+ # Make a copy, as some of the ops are mutating.
+ lazy = LazySet(set(self.base))
+ base = set(self.base)
+ self.assertEqual(
+ getattr(self.lazy, op)(set([1])),
+ getattr(self.base, op)(set([1])), op)
+ self.assertEqual(self.lazy, self.base, op)
+
+ def test_discard(self):
+ self.base.discard(1)
+ self.assertNotEqual(self.lazy, self.base)
+ self.lazy.discard(1)
+ self.assertEqual(self.lazy, self.base)
+
+ def test_pop(self):
+ self.assertEqual(self.lazy.pop(), self.base.pop())
+ self.assertEqual(self.lazy, self.base)
+
+ def test_remove(self):
+ self.base.remove(2)
+ self.lazy.remove(2)
+ self.assertEqual(self.lazy, self.base)
+
+ def test_clear(self):
+ self.lazy.clear()
+ self.assertEqual(self.lazy, set())
+
+
+if __name__ == '__main__':
+ warnings.simplefilter("error") # Warnings should be fatal in tests.
+ unittest.main()
diff --git a/pytz/tests/test_tzinfo.py b/pytz/tests/test_tzinfo.py
new file mode 100644
index 0000000..922bcb1
--- /dev/null
+++ b/pytz/tests/test_tzinfo.py
@@ -0,0 +1,837 @@
+# -*- coding: ascii -*-
+
+import sys, os, os.path
+import unittest, doctest
+try:
+ import cPickle as pickle
+except ImportError:
+ import pickle
+from datetime import datetime, time, timedelta, tzinfo
+import warnings
+
+if __name__ == '__main__':
+ # Only munge path if invoked as a script. Testrunners should have setup
+ # the paths already
+ sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir)))
+
+import pytz
+from pytz import reference
+from pytz.tzfile import _byte_string
+from pytz.tzinfo import DstTzInfo, StaticTzInfo
+
+# I test for expected version to ensure the correct version of pytz is
+# actually being tested.
+EXPECTED_VERSION='2014.10'
+EXPECTED_OLSON_VERSION='2014j'
+
+fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+
+NOTIME = timedelta(0)
+
+# GMT is a tzinfo.StaticTzInfo--the class we primarily want to test--while
+# UTC is reference implementation. They both have the same timezone meaning.
+UTC = pytz.timezone('UTC')
+GMT = pytz.timezone('GMT')
+assert isinstance(GMT, StaticTzInfo), 'GMT is no longer a StaticTzInfo'
+
+def prettydt(dt):
+ """datetime as a string using a known format.
+
+ We don't use strftime as it doesn't handle years earlier than 1900
+ per http://bugs.python.org/issue1777412
+ """
+ if dt.utcoffset() >= timedelta(0):
+ offset = '+%s' % (dt.utcoffset(),)
+ else:
+ offset = '-%s' % (-1 * dt.utcoffset(),)
+ return '%04d-%02d-%02d %02d:%02d:%02d %s %s' % (
+ dt.year, dt.month, dt.day,
+ dt.hour, dt.minute, dt.second,
+ dt.tzname(), offset)
+
+
+try:
+ unicode
+except NameError:
+ # Python 3.x doesn't have unicode(), making writing code
+ # for Python 2.3 and Python 3.x a pain.
+ unicode = str
+
+
+class BasicTest(unittest.TestCase):
+
+ def testVersion(self):
+ # Ensuring the correct version of pytz has been loaded
+ self.assertEqual(EXPECTED_VERSION, pytz.__version__,
+ 'Incorrect pytz version loaded. Import path is stuffed '
+ 'or this test needs updating. (Wanted %s, got %s)'
+ % (EXPECTED_VERSION, pytz.__version__))
+
+ self.assertEqual(EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION,
+ 'Incorrect pytz version loaded. Import path is stuffed '
+ 'or this test needs updating. (Wanted %s, got %s)'
+ % (EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION))
+
+ def testGMT(self):
+ now = datetime.now(tz=GMT)
+ self.assertTrue(now.utcoffset() == NOTIME)
+ self.assertTrue(now.dst() == NOTIME)
+ self.assertTrue(now.timetuple() == now.utctimetuple())
+ self.assertTrue(now==now.replace(tzinfo=UTC))
+
+ def testReferenceUTC(self):
+ now = datetime.now(tz=UTC)
+ self.assertTrue(now.utcoffset() == NOTIME)
+ self.assertTrue(now.dst() == NOTIME)
+ self.assertTrue(now.timetuple() == now.utctimetuple())
+
+ def testUnknownOffsets(self):
+ # This tzinfo behavior is required to make
+ # datetime.time.{utcoffset, dst, tzname} work as documented.
+
+ dst_tz = pytz.timezone('US/Eastern')
+
+ # This information is not known when we don't have a date,
+ # so return None per API.
+ self.assertTrue(dst_tz.utcoffset(None) is None)
+ self.assertTrue(dst_tz.dst(None) is None)
+ # We don't know the abbreviation, but this is still a valid
+ # tzname per the Python documentation.
+ self.assertEqual(dst_tz.tzname(None), 'US/Eastern')
+
+ def clearCache(self):
+ pytz._tzinfo_cache.clear()
+
+ def testUnicodeTimezone(self):
+ # We need to ensure that cold lookups work for both Unicode
+ # and traditional strings, and that the desired singleton is
+ # returned.
+ self.clearCache()
+ eastern = pytz.timezone(unicode('US/Eastern'))
+ self.assertTrue(eastern is pytz.timezone('US/Eastern'))
+
+ self.clearCache()
+ eastern = pytz.timezone('US/Eastern')
+ self.assertTrue(eastern is pytz.timezone(unicode('US/Eastern')))
+
+
+class PicklingTest(unittest.TestCase):
+
+ def _roundtrip_tzinfo(self, tz):
+ p = pickle.dumps(tz)
+ unpickled_tz = pickle.loads(p)
+ self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone)
+
+ def _roundtrip_datetime(self, dt):
+ # Ensure that the tzinfo attached to a datetime instance
+ # is identical to the one returned. This is important for
+ # DST timezones, as some state is stored in the tzinfo.
+ tz = dt.tzinfo
+ p = pickle.dumps(dt)
+ unpickled_dt = pickle.loads(p)
+ unpickled_tz = unpickled_dt.tzinfo
+ self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone)
+
+ def testDst(self):
+ tz = pytz.timezone('Europe/Amsterdam')
+ dt = datetime(2004, 2, 1, 0, 0, 0)
+
+ for localized_tz in tz._tzinfos.values():
+ self._roundtrip_tzinfo(localized_tz)
+ self._roundtrip_datetime(dt.replace(tzinfo=localized_tz))
+
+ def testRoundtrip(self):
+ dt = datetime(2004, 2, 1, 0, 0, 0)
+ for zone in pytz.all_timezones:
+ tz = pytz.timezone(zone)
+ self._roundtrip_tzinfo(tz)
+
+ def testDatabaseFixes(self):
+ # Hack the pickle to make it refer to a timezone abbreviation
+ # that does not match anything. The unpickler should be able
+ # to repair this case
+ tz = pytz.timezone('Australia/Melbourne')
+ p = pickle.dumps(tz)
+ tzname = tz._tzname
+ hacked_p = p.replace(_byte_string(tzname),
+ _byte_string('?'*len(tzname)))
+ self.assertNotEqual(p, hacked_p)
+ unpickled_tz = pickle.loads(hacked_p)
+ self.assertTrue(tz is unpickled_tz)
+
+ # Simulate a database correction. In this case, the incorrect
+ # data will continue to be used.
+ p = pickle.dumps(tz)
+ new_utcoffset = tz._utcoffset.seconds + 42
+
+ # Python 3 introduced a new pickle protocol where numbers are stored in
+ # hexadecimal representation. Here we extract the pickle
+ # representation of the number for the current Python version.
+ old_pickle_pattern = pickle.dumps(tz._utcoffset.seconds)[3:-1]
+ new_pickle_pattern = pickle.dumps(new_utcoffset)[3:-1]
+ hacked_p = p.replace(old_pickle_pattern, new_pickle_pattern)
+
+ self.assertNotEqual(p, hacked_p)
+ unpickled_tz = pickle.loads(hacked_p)
+ self.assertEqual(unpickled_tz._utcoffset.seconds, new_utcoffset)
+ self.assertTrue(tz is not unpickled_tz)
+
+ def testOldPickles(self):
+ # Ensure that applications serializing pytz instances as pickles
+ # have no troubles upgrading to a new pytz release. These pickles
+ # where created with pytz2006j
+ east1 = pickle.loads(_byte_string(
+ "cpytz\n_p\np1\n(S'US/Eastern'\np2\nI-18000\n"
+ "I0\nS'EST'\np3\ntRp4\n."
+ ))
+ east2 = pytz.timezone('US/Eastern').localize(
+ datetime(2006, 1, 1)).tzinfo
+ self.assertTrue(east1 is east2)
+
+ # Confirm changes in name munging between 2006j and 2007c cause
+ # no problems.
+ pap1 = pickle.loads(_byte_string(
+ "cpytz\n_p\np1\n(S'America/Port_minus_au_minus_Prince'"
+ "\np2\nI-17340\nI0\nS'PPMT'\np3\ntRp4\n."))
+ pap2 = pytz.timezone('America/Port-au-Prince').localize(
+ datetime(1910, 1, 1)).tzinfo
+ self.assertTrue(pap1 is pap2)
+
+ gmt1 = pickle.loads(_byte_string(
+ "cpytz\n_p\np1\n(S'Etc/GMT_plus_10'\np2\ntRp3\n."))
+ gmt2 = pytz.timezone('Etc/GMT+10')
+ self.assertTrue(gmt1 is gmt2)
+
+
+class USEasternDSTStartTestCase(unittest.TestCase):
+ tzinfo = pytz.timezone('US/Eastern')
+
+ # 24 hours before DST changeover
+ transition_time = datetime(2002, 4, 7, 7, 0, 0, tzinfo=UTC)
+
+ # Increase for 'flexible' DST transitions due to 1 minute granularity
+ # of Python's datetime library
+ instant = timedelta(seconds=1)
+
+ # before transition
+ before = {
+ 'tzname': 'EST',
+ 'utcoffset': timedelta(hours = -5),
+ 'dst': timedelta(hours = 0),
+ }
+
+ # after transition
+ after = {
+ 'tzname': 'EDT',
+ 'utcoffset': timedelta(hours = -4),
+ 'dst': timedelta(hours = 1),
+ }
+
+ def _test_tzname(self, utc_dt, wanted):
+ tzname = wanted['tzname']
+ dt = utc_dt.astimezone(self.tzinfo)
+ self.assertEqual(dt.tzname(), tzname,
+ 'Expected %s as tzname for %s. Got %s' % (
+ tzname, str(utc_dt), dt.tzname()
+ )
+ )
+
+ def _test_utcoffset(self, utc_dt, wanted):
+ utcoffset = wanted['utcoffset']
+ dt = utc_dt.astimezone(self.tzinfo)
+ self.assertEqual(
+ dt.utcoffset(), wanted['utcoffset'],
+ 'Expected %s as utcoffset for %s. Got %s' % (
+ utcoffset, utc_dt, dt.utcoffset()
+ )
+ )
+
+ def _test_dst(self, utc_dt, wanted):
+ dst = wanted['dst']
+ dt = utc_dt.astimezone(self.tzinfo)
+ self.assertEqual(dt.dst(),dst,
+ 'Expected %s as dst for %s. Got %s' % (
+ dst, utc_dt, dt.dst()
+ )
+ )
+
+ def test_arithmetic(self):
+ utc_dt = self.transition_time
+
+ for days in range(-420, 720, 20):
+ delta = timedelta(days=days)
+
+ # Make sure we can get back where we started
+ dt = utc_dt.astimezone(self.tzinfo)
+ dt2 = dt + delta
+ dt2 = dt2 - delta
+ self.assertEqual(dt, dt2)
+
+ # Make sure arithmetic crossing DST boundaries ends
+ # up in the correct timezone after normalization
+ utc_plus_delta = (utc_dt + delta).astimezone(self.tzinfo)
+ local_plus_delta = self.tzinfo.normalize(dt + delta)
+ self.assertEqual(
+ prettydt(utc_plus_delta),
+ prettydt(local_plus_delta),
+ 'Incorrect result for delta==%d days. Wanted %r. Got %r'%(
+ days,
+ prettydt(utc_plus_delta),
+ prettydt(local_plus_delta),
+ )
+ )
+
+ def _test_all(self, utc_dt, wanted):
+ self._test_utcoffset(utc_dt, wanted)
+ self._test_tzname(utc_dt, wanted)
+ self._test_dst(utc_dt, wanted)
+
+ def testDayBefore(self):
+ self._test_all(
+ self.transition_time - timedelta(days=1), self.before
+ )
+
+ def testTwoHoursBefore(self):
+ self._test_all(
+ self.transition_time - timedelta(hours=2), self.before
+ )
+
+ def testHourBefore(self):
+ self._test_all(
+ self.transition_time - timedelta(hours=1), self.before
+ )
+
+ def testInstantBefore(self):
+ self._test_all(
+ self.transition_time - self.instant, self.before
+ )
+
+ def testTransition(self):
+ self._test_all(
+ self.transition_time, self.after
+ )
+
+ def testInstantAfter(self):
+ self._test_all(
+ self.transition_time + self.instant, self.after
+ )
+
+ def testHourAfter(self):
+ self._test_all(
+ self.transition_time + timedelta(hours=1), self.after
+ )
+
+ def testTwoHoursAfter(self):
+ self._test_all(
+ self.transition_time + timedelta(hours=1), self.after
+ )
+
+ def testDayAfter(self):
+ self._test_all(
+ self.transition_time + timedelta(days=1), self.after
+ )
+
+
+class USEasternDSTEndTestCase(USEasternDSTStartTestCase):
+ tzinfo = pytz.timezone('US/Eastern')
+ transition_time = datetime(2002, 10, 27, 6, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'EDT',
+ 'utcoffset': timedelta(hours = -4),
+ 'dst': timedelta(hours = 1),
+ }
+ after = {
+ 'tzname': 'EST',
+ 'utcoffset': timedelta(hours = -5),
+ 'dst': timedelta(hours = 0),
+ }
+
+
+class USEasternEPTStartTestCase(USEasternDSTStartTestCase):
+ transition_time = datetime(1945, 8, 14, 23, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'EWT',
+ 'utcoffset': timedelta(hours = -4),
+ 'dst': timedelta(hours = 1),
+ }
+ after = {
+ 'tzname': 'EPT',
+ 'utcoffset': timedelta(hours = -4),
+ 'dst': timedelta(hours = 1),
+ }
+
+
+class USEasternEPTEndTestCase(USEasternDSTStartTestCase):
+ transition_time = datetime(1945, 9, 30, 6, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'EPT',
+ 'utcoffset': timedelta(hours = -4),
+ 'dst': timedelta(hours = 1),
+ }
+ after = {
+ 'tzname': 'EST',
+ 'utcoffset': timedelta(hours = -5),
+ 'dst': timedelta(hours = 0),
+ }
+
+
+class WarsawWMTEndTestCase(USEasternDSTStartTestCase):
+ # In 1915, Warsaw changed from Warsaw to Central European time.
+ # This involved the clocks being set backwards, causing a end-of-DST
+ # like situation without DST being involved.
+ tzinfo = pytz.timezone('Europe/Warsaw')
+ transition_time = datetime(1915, 8, 4, 22, 36, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'WMT',
+ 'utcoffset': timedelta(hours=1, minutes=24),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'CET',
+ 'utcoffset': timedelta(hours=1),
+ 'dst': timedelta(0),
+ }
+
+
+class VilniusWMTEndTestCase(USEasternDSTStartTestCase):
+ # At the end of 1916, Vilnius changed timezones putting its clock
+ # forward by 11 minutes 35 seconds. Neither timezone was in DST mode.
+ tzinfo = pytz.timezone('Europe/Vilnius')
+ instant = timedelta(seconds=31)
+ transition_time = datetime(1916, 12, 31, 22, 36, 00, tzinfo=UTC)
+ before = {
+ 'tzname': 'WMT',
+ 'utcoffset': timedelta(hours=1, minutes=24),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'KMT',
+ 'utcoffset': timedelta(hours=1, minutes=36), # Really 1:35:36
+ 'dst': timedelta(0),
+ }
+
+
+class VilniusCESTStartTestCase(USEasternDSTStartTestCase):
+ # In 1941, Vilnius changed from MSG to CEST, switching to summer
+ # time while simultaneously reducing its UTC offset by two hours,
+ # causing the clocks to go backwards for this summer time
+ # switchover.
+ tzinfo = pytz.timezone('Europe/Vilnius')
+ transition_time = datetime(1941, 6, 23, 21, 00, 00, tzinfo=UTC)
+ before = {
+ 'tzname': 'MSK',
+ 'utcoffset': timedelta(hours=3),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'CEST',
+ 'utcoffset': timedelta(hours=2),
+ 'dst': timedelta(hours=1),
+ }
+
+
+class LondonHistoryStartTestCase(USEasternDSTStartTestCase):
+ # The first known timezone transition in London was in 1847 when
+ # clocks where synchronized to GMT. However, we currently only
+ # understand v1 format tzfile(5) files which does handle years
+ # this far in the past, so our earliest known transition is in
+ # 1916.
+ tzinfo = pytz.timezone('Europe/London')
+ # transition_time = datetime(1847, 12, 1, 1, 15, 00, tzinfo=UTC)
+ # before = {
+ # 'tzname': 'LMT',
+ # 'utcoffset': timedelta(minutes=-75),
+ # 'dst': timedelta(0),
+ # }
+ # after = {
+ # 'tzname': 'GMT',
+ # 'utcoffset': timedelta(0),
+ # 'dst': timedelta(0),
+ # }
+ transition_time = datetime(1916, 5, 21, 2, 00, 00, tzinfo=UTC)
+ before = {
+ 'tzname': 'GMT',
+ 'utcoffset': timedelta(0),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'BST',
+ 'utcoffset': timedelta(hours=1),
+ 'dst': timedelta(hours=1),
+ }
+
+
+class LondonHistoryEndTestCase(USEasternDSTStartTestCase):
+ # Timezone switchovers are projected into the future, even
+ # though no official statements exist or could be believed even
+ # if they did exist. We currently only check the last known
+ # transition in 2037, as we are still using v1 format tzfile(5)
+ # files.
+ tzinfo = pytz.timezone('Europe/London')
+ # transition_time = datetime(2499, 10, 25, 1, 0, 0, tzinfo=UTC)
+ transition_time = datetime(2037, 10, 25, 1, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'BST',
+ 'utcoffset': timedelta(hours=1),
+ 'dst': timedelta(hours=1),
+ }
+ after = {
+ 'tzname': 'GMT',
+ 'utcoffset': timedelta(0),
+ 'dst': timedelta(0),
+ }
+
+
+class NoumeaHistoryStartTestCase(USEasternDSTStartTestCase):
+ # Noumea adopted a whole hour offset in 1912. Previously
+ # it was 11 hours, 5 minutes and 48 seconds off UTC. However,
+ # due to limitations of the Python datetime library, we need
+ # to round that to 11 hours 6 minutes.
+ tzinfo = pytz.timezone('Pacific/Noumea')
+ transition_time = datetime(1912, 1, 12, 12, 54, 12, tzinfo=UTC)
+ before = {
+ 'tzname': 'LMT',
+ 'utcoffset': timedelta(hours=11, minutes=6),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'NCT',
+ 'utcoffset': timedelta(hours=11),
+ 'dst': timedelta(0),
+ }
+
+
+class NoumeaDSTEndTestCase(USEasternDSTStartTestCase):
+ # Noumea dropped DST in 1997.
+ tzinfo = pytz.timezone('Pacific/Noumea')
+ transition_time = datetime(1997, 3, 1, 15, 00, 00, tzinfo=UTC)
+ before = {
+ 'tzname': 'NCST',
+ 'utcoffset': timedelta(hours=12),
+ 'dst': timedelta(hours=1),
+ }
+ after = {
+ 'tzname': 'NCT',
+ 'utcoffset': timedelta(hours=11),
+ 'dst': timedelta(0),
+ }
+
+
+class NoumeaNoMoreDSTTestCase(NoumeaDSTEndTestCase):
+ # Noumea dropped DST in 1997. Here we test that it stops occuring.
+ transition_time = (
+ NoumeaDSTEndTestCase.transition_time + timedelta(days=365*10))
+ before = NoumeaDSTEndTestCase.after
+ after = NoumeaDSTEndTestCase.after
+
+
+class TahitiTestCase(USEasternDSTStartTestCase):
+ # Tahiti has had a single transition in its history.
+ tzinfo = pytz.timezone('Pacific/Tahiti')
+ transition_time = datetime(1912, 10, 1, 9, 58, 16, tzinfo=UTC)
+ before = {
+ 'tzname': 'LMT',
+ 'utcoffset': timedelta(hours=-9, minutes=-58),
+ 'dst': timedelta(0),
+ }
+ after = {
+ 'tzname': 'TAHT',
+ 'utcoffset': timedelta(hours=-10),
+ 'dst': timedelta(0),
+ }
+
+
+class SamoaInternationalDateLineChange(USEasternDSTStartTestCase):
+ # At the end of 2011, Samoa will switch from being east of the
+ # international dateline to the west. There will be no Dec 30th
+ # 2011 and it will switch from UTC-10 to UTC+14.
+ tzinfo = pytz.timezone('Pacific/Apia')
+ transition_time = datetime(2011, 12, 30, 10, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'SDT',
+ 'utcoffset': timedelta(hours=-10),
+ 'dst': timedelta(hours=1),
+ }
+ after = {
+ 'tzname': 'WSDT',
+ 'utcoffset': timedelta(hours=14),
+ 'dst': timedelta(hours=1),
+ }
+
+
+class ReferenceUSEasternDSTStartTestCase(USEasternDSTStartTestCase):
+ tzinfo = reference.Eastern
+ def test_arithmetic(self):
+ # Reference implementation cannot handle this
+ pass
+
+
+class ReferenceUSEasternDSTEndTestCase(USEasternDSTEndTestCase):
+ tzinfo = reference.Eastern
+
+ def testHourBefore(self):
+ # Python's datetime library has a bug, where the hour before
+ # a daylight saving transition is one hour out. For example,
+ # at the end of US/Eastern daylight saving time, 01:00 EST
+ # occurs twice (once at 05:00 UTC and once at 06:00 UTC),
+ # whereas the first should actually be 01:00 EDT.
+ # Note that this bug is by design - by accepting this ambiguity
+ # for one hour one hour per year, an is_dst flag on datetime.time
+ # became unnecessary.
+ self._test_all(
+ self.transition_time - timedelta(hours=1), self.after
+ )
+
+ def testInstantBefore(self):
+ self._test_all(
+ self.transition_time - timedelta(seconds=1), self.after
+ )
+
+ def test_arithmetic(self):
+ # Reference implementation cannot handle this
+ pass
+
+
+class LocalTestCase(unittest.TestCase):
+ def testLocalize(self):
+ loc_tz = pytz.timezone('Europe/Amsterdam')
+
+ loc_time = loc_tz.localize(datetime(1930, 5, 10, 0, 0, 0))
+ # Actually +00:19:32, but Python datetime rounds this
+ self.assertEqual(loc_time.strftime('%Z%z'), 'AMT+0020')
+
+ loc_time = loc_tz.localize(datetime(1930, 5, 20, 0, 0, 0))
+ # Actually +00:19:32, but Python datetime rounds this
+ self.assertEqual(loc_time.strftime('%Z%z'), 'NST+0120')
+
+ loc_time = loc_tz.localize(datetime(1940, 5, 10, 0, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'NET+0020')
+
+ loc_time = loc_tz.localize(datetime(1940, 5, 20, 0, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'CEST+0200')
+
+ loc_time = loc_tz.localize(datetime(2004, 2, 1, 0, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'CET+0100')
+
+ loc_time = loc_tz.localize(datetime(2004, 4, 1, 0, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'CEST+0200')
+
+ tz = pytz.timezone('Europe/Amsterdam')
+ loc_time = loc_tz.localize(datetime(1943, 3, 29, 1, 59, 59))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'CET+0100')
+
+
+ # Switch to US
+ loc_tz = pytz.timezone('US/Eastern')
+
+ # End of DST ambiguity check
+ loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=1)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EDT-0400')
+
+ loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=0)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500')
+
+ self.assertRaises(pytz.AmbiguousTimeError,
+ loc_tz.localize, datetime(1918, 10, 27, 1, 59, 59), is_dst=None
+ )
+
+ # Start of DST non-existent times
+ loc_time = loc_tz.localize(datetime(1918, 3, 31, 2, 0, 0), is_dst=0)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500')
+
+ loc_time = loc_tz.localize(datetime(1918, 3, 31, 2, 0, 0), is_dst=1)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EDT-0400')
+
+ self.assertRaises(pytz.NonExistentTimeError,
+ loc_tz.localize, datetime(1918, 3, 31, 2, 0, 0), is_dst=None
+ )
+
+ # Weird changes - war time and peace time both is_dst==True
+
+ loc_time = loc_tz.localize(datetime(1942, 2, 9, 3, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EWT-0400')
+
+ loc_time = loc_tz.localize(datetime(1945, 8, 14, 19, 0, 0))
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EPT-0400')
+
+ loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=1)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EPT-0400')
+
+ loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=0)
+ self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500')
+
+ # Weird changes - ambiguous time (end-of-DST like) but is_dst==False
+ for zonename, ambiguous_naive, expected in [
+ ('Europe/Warsaw', datetime(1915, 8, 4, 23, 59, 59),
+ ['1915-08-04 23:59:59 WMT+0124',
+ '1915-08-04 23:59:59 CET+0100']),
+ ('Europe/Moscow', datetime(2014, 10, 26, 1, 30),
+ ['2014-10-26 01:30:00 MSK+0400',
+ '2014-10-26 01:30:00 MSK+0300'])]:
+ loc_tz = pytz.timezone(zonename)
+ self.assertRaises(pytz.AmbiguousTimeError,
+ loc_tz.localize, ambiguous_naive, is_dst=None
+ )
+ # Also test non-boolean is_dst in the weird case
+ for dst in [True, timedelta(1), False, timedelta(0)]:
+ loc_time = loc_tz.localize(ambiguous_naive, is_dst=dst)
+ self.assertEqual(loc_time.strftime(fmt), expected[not dst])
+
+ def testNormalize(self):
+ tz = pytz.timezone('US/Eastern')
+ dt = datetime(2004, 4, 4, 7, 0, 0, tzinfo=UTC).astimezone(tz)
+ dt2 = dt - timedelta(minutes=10)
+ self.assertEqual(
+ dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'),
+ '2004-04-04 02:50:00 EDT-0400'
+ )
+
+ dt2 = tz.normalize(dt2)
+ self.assertEqual(
+ dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'),
+ '2004-04-04 01:50:00 EST-0500'
+ )
+
+ def testPartialMinuteOffsets(self):
+ # utcoffset in Amsterdam was not a whole minute until 1937
+ # However, we fudge this by rounding them, as the Python
+ # datetime library
+ tz = pytz.timezone('Europe/Amsterdam')
+ utc_dt = datetime(1914, 1, 1, 13, 40, 28, tzinfo=UTC) # correct
+ utc_dt = utc_dt.replace(second=0) # But we need to fudge it
+ loc_dt = utc_dt.astimezone(tz)
+ self.assertEqual(
+ loc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'),
+ '1914-01-01 14:00:00 AMT+0020'
+ )
+
+ # And get back...
+ utc_dt = loc_dt.astimezone(UTC)
+ self.assertEqual(
+ utc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'),
+ '1914-01-01 13:40:00 UTC+0000'
+ )
+
+ def no_testCreateLocaltime(self):
+ # It would be nice if this worked, but it doesn't.
+ tz = pytz.timezone('Europe/Amsterdam')
+ dt = datetime(2004, 10, 31, 2, 0, 0, tzinfo=tz)
+ self.assertEqual(
+ dt.strftime(fmt),
+ '2004-10-31 02:00:00 CET+0100'
+ )
+
+
+class CommonTimezonesTestCase(unittest.TestCase):
+ def test_bratislava(self):
+ # Bratislava is the default timezone for Slovakia, but our
+ # heuristics where not adding it to common_timezones. Ideally,
+ # common_timezones should be populated from zone.tab at runtime,
+ # but I'm hesitant to pay the startup cost as loading the list
+ # on demand whilst remaining backwards compatible seems
+ # difficult.
+ self.assertTrue('Europe/Bratislava' in pytz.common_timezones)
+ self.assertTrue('Europe/Bratislava' in pytz.common_timezones_set)
+
+ def test_us_eastern(self):
+ self.assertTrue('US/Eastern' in pytz.common_timezones)
+ self.assertTrue('US/Eastern' in pytz.common_timezones_set)
+
+ def test_belfast(self):
+ # Belfast uses London time.
+ self.assertTrue('Europe/Belfast' in pytz.all_timezones_set)
+ self.assertFalse('Europe/Belfast' in pytz.common_timezones)
+ self.assertFalse('Europe/Belfast' in pytz.common_timezones_set)
+
+
+class BaseTzInfoTestCase:
+ '''Ensure UTC, StaticTzInfo and DstTzInfo work consistently.
+
+ These tests are run for each type of tzinfo.
+ '''
+ tz = None # override
+ tz_class = None # override
+
+ def test_expectedclass(self):
+ self.assertTrue(isinstance(self.tz, self.tz_class))
+
+ def test_fromutc(self):
+ # naive datetime.
+ dt1 = datetime(2011, 10, 31)
+
+ # localized datetime, same timezone.
+ dt2 = self.tz.localize(dt1)
+
+ # Both should give the same results. Note that the standard
+ # Python tzinfo.fromutc() only supports the second.
+ for dt in [dt1, dt2]:
+ loc_dt = self.tz.fromutc(dt)
+ loc_dt2 = pytz.utc.localize(dt1).astimezone(self.tz)
+ self.assertEqual(loc_dt, loc_dt2)
+
+ # localized datetime, different timezone.
+ new_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not new_tz)
+ dt3 = new_tz.localize(dt1)
+ self.assertRaises(ValueError, self.tz.fromutc, dt3)
+
+ def test_normalize(self):
+ other_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not other_tz)
+
+ dt = datetime(2012, 3, 26, 12, 0)
+ other_dt = other_tz.localize(dt)
+
+ local_dt = self.tz.normalize(other_dt)
+
+ self.assertTrue(local_dt.tzinfo is not other_dt.tzinfo)
+ self.assertNotEqual(
+ local_dt.replace(tzinfo=None), other_dt.replace(tzinfo=None))
+
+ def test_astimezone(self):
+ other_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not other_tz)
+
+ dt = datetime(2012, 3, 26, 12, 0)
+ other_dt = other_tz.localize(dt)
+
+ local_dt = other_dt.astimezone(self.tz)
+
+ self.assertTrue(local_dt.tzinfo is not other_dt.tzinfo)
+ self.assertNotEqual(
+ local_dt.replace(tzinfo=None), other_dt.replace(tzinfo=None))
+
+
+class OptimizedUTCTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.utc
+ tz_class = tz.__class__
+
+
+class LegacyUTCTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ # Deprecated timezone, but useful for comparison tests.
+ tz = pytz.timezone('Etc/UTC')
+ tz_class = StaticTzInfo
+
+
+class StaticTzInfoTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.timezone('GMT')
+ tz_class = StaticTzInfo
+
+
+class DstTzInfoTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.timezone('Australia/Melbourne')
+ tz_class = DstTzInfo
+
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(doctest.DocTestSuite('pytz'))
+ suite.addTest(doctest.DocTestSuite('pytz.tzinfo'))
+ import test_tzinfo
+ suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_tzinfo))
+ return suite
+
+
+if __name__ == '__main__':
+ warnings.simplefilter("error") # Warnings should be fatal in tests.
+ unittest.main(defaultTest='test_suite')
diff --git a/pytz/tzfile.py b/pytz/tzfile.py
new file mode 100644
index 0000000..9c007c8
--- /dev/null
+++ b/pytz/tzfile.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+'''
+$Id: tzfile.py,v 1.8 2004/06/03 00:15:24 zenzen Exp $
+'''
+
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from io import StringIO
+from datetime import datetime, timedelta
+from struct import unpack, calcsize
+
+from pytz.tzinfo import StaticTzInfo, DstTzInfo, memorized_ttinfo
+from pytz.tzinfo import memorized_datetime, memorized_timedelta
+
+def _byte_string(s):
+ """Cast a string or byte string to an ASCII byte string."""
+ return s.encode('US-ASCII')
+
+_NULL = _byte_string('\0')
+
+def _std_string(s):
+ """Cast a string or byte string to an ASCII string."""
+ return str(s.decode('US-ASCII'))
+
+def build_tzinfo(zone, fp):
+ head_fmt = '>4s c 15x 6l'
+ head_size = calcsize(head_fmt)
+ (magic, format, ttisgmtcnt, ttisstdcnt,leapcnt, timecnt,
+ typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
+
+ # Make sure it is a tzfile(5) file
+ assert magic == _byte_string('TZif'), 'Got magic %s' % repr(magic)
+
+ # Read out the transition times, localtime indices and ttinfo structures.
+ data_fmt = '>%(timecnt)dl %(timecnt)dB %(ttinfo)s %(charcnt)ds' % dict(
+ timecnt=timecnt, ttinfo='lBB'*typecnt, charcnt=charcnt)
+ data_size = calcsize(data_fmt)
+ data = unpack(data_fmt, fp.read(data_size))
+
+ # make sure we unpacked the right number of values
+ assert len(data) == 2 * timecnt + 3 * typecnt + 1
+ transitions = [memorized_datetime(trans)
+ for trans in data[:timecnt]]
+ lindexes = list(data[timecnt:2 * timecnt])
+ ttinfo_raw = data[2 * timecnt:-1]
+ tznames_raw = data[-1]
+ del data
+
+ # Process ttinfo into separate structs
+ ttinfo = []
+ tznames = {}
+ i = 0
+ while i < len(ttinfo_raw):
+ # have we looked up this timezone name yet?
+ tzname_offset = ttinfo_raw[i+2]
+ if tzname_offset not in tznames:
+ nul = tznames_raw.find(_NULL, tzname_offset)
+ if nul < 0:
+ nul = len(tznames_raw)
+ tznames[tzname_offset] = _std_string(
+ tznames_raw[tzname_offset:nul])
+ ttinfo.append((ttinfo_raw[i],
+ bool(ttinfo_raw[i+1]),
+ tznames[tzname_offset]))
+ i += 3
+
+ # Now build the timezone object
+ if len(transitions) == 0:
+ ttinfo[0][0], ttinfo[0][2]
+ cls = type(zone, (StaticTzInfo,), dict(
+ zone=zone,
+ _utcoffset=memorized_timedelta(ttinfo[0][0]),
+ _tzname=ttinfo[0][2]))
+ else:
+ # Early dates use the first standard time ttinfo
+ i = 0
+ while ttinfo[i][1]:
+ i += 1
+ if ttinfo[i] == ttinfo[lindexes[0]]:
+ transitions[0] = datetime.min
+ else:
+ transitions.insert(0, datetime.min)
+ lindexes.insert(0, i)
+
+ # calculate transition info
+ transition_info = []
+ for i in range(len(transitions)):
+ inf = ttinfo[lindexes[i]]
+ utcoffset = inf[0]
+ if not inf[1]:
+ dst = 0
+ else:
+ for j in range(i-1, -1, -1):
+ prev_inf = ttinfo[lindexes[j]]
+ if not prev_inf[1]:
+ break
+ dst = inf[0] - prev_inf[0] # dst offset
+
+ # Bad dst? Look further. DST > 24 hours happens when
+ # a timzone has moved across the international dateline.
+ if dst <= 0 or dst > 3600*3:
+ for j in range(i+1, len(transitions)):
+ stdinf = ttinfo[lindexes[j]]
+ if not stdinf[1]:
+ dst = inf[0] - stdinf[0]
+ if dst > 0:
+ break # Found a useful std time.
+
+ tzname = inf[2]
+
+ # Round utcoffset and dst to the nearest minute or the
+ # datetime library will complain. Conversions to these timezones
+ # might be up to plus or minus 30 seconds out, but it is
+ # the best we can do.
+ utcoffset = int((utcoffset + 30) // 60) * 60
+ dst = int((dst + 30) // 60) * 60
+ transition_info.append(memorized_ttinfo(utcoffset, dst, tzname))
+
+ cls = type(zone, (DstTzInfo,), dict(
+ zone=zone,
+ _utc_transition_times=transitions,
+ _transition_info=transition_info))
+
+ return cls()
+
+if __name__ == '__main__':
+ import os.path
+ from pprint import pprint
+ base = os.path.join(os.path.dirname(__file__), 'zoneinfo')
+ tz = build_tzinfo('Australia/Melbourne',
+ open(os.path.join(base,'Australia','Melbourne'), 'rb'))
+ tz = build_tzinfo('US/Eastern',
+ open(os.path.join(base,'US','Eastern'), 'rb'))
+ pprint(tz._utc_transition_times)
+ #print tz.asPython(4)
+ #print tz.transitions_mapping
diff --git a/pytz/tzinfo.py b/pytz/tzinfo.py
new file mode 100644
index 0000000..1318872
--- /dev/null
+++ b/pytz/tzinfo.py
@@ -0,0 +1,564 @@
+'''Base classes and helpers for building zone specific tzinfo classes'''
+
+from datetime import datetime, timedelta, tzinfo
+from bisect import bisect_right
+try:
+ set
+except NameError:
+ from sets import Set as set
+
+import pytz
+from pytz.exceptions import AmbiguousTimeError, NonExistentTimeError
+
+__all__ = []
+
+_timedelta_cache = {}
+def memorized_timedelta(seconds):
+ '''Create only one instance of each distinct timedelta'''
+ try:
+ return _timedelta_cache[seconds]
+ except KeyError:
+ delta = timedelta(seconds=seconds)
+ _timedelta_cache[seconds] = delta
+ return delta
+
+_epoch = datetime.utcfromtimestamp(0)
+_datetime_cache = {0: _epoch}
+def memorized_datetime(seconds):
+ '''Create only one instance of each distinct datetime'''
+ try:
+ return _datetime_cache[seconds]
+ except KeyError:
+ # NB. We can't just do datetime.utcfromtimestamp(seconds) as this
+ # fails with negative values under Windows (Bug #90096)
+ dt = _epoch + timedelta(seconds=seconds)
+ _datetime_cache[seconds] = dt
+ return dt
+
+_ttinfo_cache = {}
+def memorized_ttinfo(*args):
+ '''Create only one instance of each distinct tuple'''
+ try:
+ return _ttinfo_cache[args]
+ except KeyError:
+ ttinfo = (
+ memorized_timedelta(args[0]),
+ memorized_timedelta(args[1]),
+ args[2]
+ )
+ _ttinfo_cache[args] = ttinfo
+ return ttinfo
+
+_notime = memorized_timedelta(0)
+
+def _to_seconds(td):
+ '''Convert a timedelta to seconds'''
+ return td.seconds + td.days * 24 * 60 * 60
+
+
+class BaseTzInfo(tzinfo):
+ # Overridden in subclass
+ _utcoffset = None
+ _tzname = None
+ zone = None
+
+ def __str__(self):
+ return self.zone
+
+
+class StaticTzInfo(BaseTzInfo):
+ '''A timezone that has a constant offset from UTC
+
+ These timezones are rare, as most locations have changed their
+ offset at some point in their history
+ '''
+ def fromutc(self, dt):
+ '''See datetime.tzinfo.fromutc'''
+ if dt.tzinfo is not None and dt.tzinfo is not self:
+ raise ValueError('fromutc: dt.tzinfo is not self')
+ return (dt + self._utcoffset).replace(tzinfo=self)
+
+ def utcoffset(self, dt, is_dst=None):
+ '''See datetime.tzinfo.utcoffset
+
+ is_dst is ignored for StaticTzInfo, and exists only to
+ retain compatibility with DstTzInfo.
+ '''
+ return self._utcoffset
+
+ def dst(self, dt, is_dst=None):
+ '''See datetime.tzinfo.dst
+
+ is_dst is ignored for StaticTzInfo, and exists only to
+ retain compatibility with DstTzInfo.
+ '''
+ return _notime
+
+ def tzname(self, dt, is_dst=None):
+ '''See datetime.tzinfo.tzname
+
+ is_dst is ignored for StaticTzInfo, and exists only to
+ retain compatibility with DstTzInfo.
+ '''
+ return self._tzname
+
+ def localize(self, dt, is_dst=False):
+ '''Convert naive time to local time'''
+ if dt.tzinfo is not None:
+ raise ValueError('Not naive datetime (tzinfo is already set)')
+ return dt.replace(tzinfo=self)
+
+ def normalize(self, dt, is_dst=False):
+ '''Correct the timezone information on the given datetime.
+
+ This is normally a no-op, as StaticTzInfo timezones never have
+ ambiguous cases to correct:
+
+ >>> from pytz import timezone
+ >>> gmt = timezone('GMT')
+ >>> isinstance(gmt, StaticTzInfo)
+ True
+ >>> dt = datetime(2011, 5, 8, 1, 2, 3, tzinfo=gmt)
+ >>> gmt.normalize(dt) is dt
+ True
+
+ The supported method of converting between timezones is to use
+ datetime.astimezone(). Currently normalize() also works:
+
+ >>> la = timezone('America/Los_Angeles')
+ >>> dt = la.localize(datetime(2011, 5, 7, 1, 2, 3))
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
+ >>> gmt.normalize(dt).strftime(fmt)
+ '2011-05-07 08:02:03 GMT (+0000)'
+ '''
+ if dt.tzinfo is self:
+ return dt
+ if dt.tzinfo is None:
+ raise ValueError('Naive time - no tzinfo set')
+ return dt.astimezone(self)
+
+ def __repr__(self):
+ return '<StaticTzInfo %r>' % (self.zone,)
+
+ def __reduce__(self):
+ # Special pickle to zone remains a singleton and to cope with
+ # database changes.
+ return pytz._p, (self.zone,)
+
+
+class DstTzInfo(BaseTzInfo):
+ '''A timezone that has a variable offset from UTC
+
+ The offset might change if daylight saving time comes into effect,
+ or at a point in history when the region decides to change their
+ timezone definition.
+ '''
+ # Overridden in subclass
+ _utc_transition_times = None # Sorted list of DST transition times in UTC
+ _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
+ # to _utc_transition_times entries
+ zone = None
+
+ # Set in __init__
+ _tzinfos = None
+ _dst = None # DST offset
+
+ def __init__(self, _inf=None, _tzinfos=None):
+ if _inf:
+ self._tzinfos = _tzinfos
+ self._utcoffset, self._dst, self._tzname = _inf
+ else:
+ _tzinfos = {}
+ self._tzinfos = _tzinfos
+ self._utcoffset, self._dst, self._tzname = self._transition_info[0]
+ _tzinfos[self._transition_info[0]] = self
+ for inf in self._transition_info[1:]:
+ if inf not in _tzinfos:
+ _tzinfos[inf] = self.__class__(inf, _tzinfos)
+
+ def fromutc(self, dt):
+ '''See datetime.tzinfo.fromutc'''
+ if (dt.tzinfo is not None
+ and getattr(dt.tzinfo, '_tzinfos', None) is not self._tzinfos):
+ raise ValueError('fromutc: dt.tzinfo is not self')
+ dt = dt.replace(tzinfo=None)
+ idx = max(0, bisect_right(self._utc_transition_times, dt) - 1)
+ inf = self._transition_info[idx]
+ return (dt + inf[0]).replace(tzinfo=self._tzinfos[inf])
+
+ def normalize(self, dt):
+ '''Correct the timezone information on the given datetime
+
+ If date arithmetic crosses DST boundaries, the tzinfo
+ is not magically adjusted. This method normalizes the
+ tzinfo to the correct one.
+
+ To test, first we need to do some setup
+
+ >>> from pytz import timezone
+ >>> utc = timezone('UTC')
+ >>> eastern = timezone('US/Eastern')
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
+
+ We next create a datetime right on an end-of-DST transition point,
+ the instant when the wallclocks are wound back one hour.
+
+ >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
+ >>> loc_dt = utc_dt.astimezone(eastern)
+ >>> loc_dt.strftime(fmt)
+ '2002-10-27 01:00:00 EST (-0500)'
+
+ Now, if we subtract a few minutes from it, note that the timezone
+ information has not changed.
+
+ >>> before = loc_dt - timedelta(minutes=10)
+ >>> before.strftime(fmt)
+ '2002-10-27 00:50:00 EST (-0500)'
+
+ But we can fix that by calling the normalize method
+
+ >>> before = eastern.normalize(before)
+ >>> before.strftime(fmt)
+ '2002-10-27 01:50:00 EDT (-0400)'
+
+ The supported method of converting between timezones is to use
+ datetime.astimezone(). Currently, normalize() also works:
+
+ >>> th = timezone('Asia/Bangkok')
+ >>> am = timezone('Europe/Amsterdam')
+ >>> dt = th.localize(datetime(2011, 5, 7, 1, 2, 3))
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
+ >>> am.normalize(dt).strftime(fmt)
+ '2011-05-06 20:02:03 CEST (+0200)'
+ '''
+ if dt.tzinfo is None:
+ raise ValueError('Naive time - no tzinfo set')
+
+ # Convert dt in localtime to UTC
+ offset = dt.tzinfo._utcoffset
+ dt = dt.replace(tzinfo=None)
+ dt = dt - offset
+ # convert it back, and return it
+ return self.fromutc(dt)
+
+ def localize(self, dt, is_dst=False):
+ '''Convert naive time to local time.
+
+ This method should be used to construct localtimes, rather
+ than passing a tzinfo argument to a datetime constructor.
+
+ is_dst is used to determine the correct timezone in the ambigous
+ period at the end of daylight saving time.
+
+ >>> from pytz import timezone
+ >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
+ >>> amdam = timezone('Europe/Amsterdam')
+ >>> dt = datetime(2004, 10, 31, 2, 0, 0)
+ >>> loc_dt1 = amdam.localize(dt, is_dst=True)
+ >>> loc_dt2 = amdam.localize(dt, is_dst=False)
+ >>> loc_dt1.strftime(fmt)
+ '2004-10-31 02:00:00 CEST (+0200)'
+ >>> loc_dt2.strftime(fmt)
+ '2004-10-31 02:00:00 CET (+0100)'
+ >>> str(loc_dt2 - loc_dt1)
+ '1:00:00'
+
+ Use is_dst=None to raise an AmbiguousTimeError for ambiguous
+ times at the end of daylight saving time
+
+ >>> try:
+ ... loc_dt1 = amdam.localize(dt, is_dst=None)
+ ... except AmbiguousTimeError:
+ ... print('Ambiguous')
+ Ambiguous
+
+ is_dst defaults to False
+
+ >>> amdam.localize(dt) == amdam.localize(dt, False)
+ True
+
+ is_dst is also used to determine the correct timezone in the
+ wallclock times jumped over at the start of daylight saving time.
+
+ >>> pacific = timezone('US/Pacific')
+ >>> dt = datetime(2008, 3, 9, 2, 0, 0)
+ >>> ploc_dt1 = pacific.localize(dt, is_dst=True)
+ >>> ploc_dt2 = pacific.localize(dt, is_dst=False)
+ >>> ploc_dt1.strftime(fmt)
+ '2008-03-09 02:00:00 PDT (-0700)'
+ >>> ploc_dt2.strftime(fmt)
+ '2008-03-09 02:00:00 PST (-0800)'
+ >>> str(ploc_dt2 - ploc_dt1)
+ '1:00:00'
+
+ Use is_dst=None to raise a NonExistentTimeError for these skipped
+ times.
+
+ >>> try:
+ ... loc_dt1 = pacific.localize(dt, is_dst=None)
+ ... except NonExistentTimeError:
+ ... print('Non-existent')
+ Non-existent
+ '''
+ if dt.tzinfo is not None:
+ raise ValueError('Not naive datetime (tzinfo is already set)')
+
+ # Find the two best possibilities.
+ possible_loc_dt = set()
+ for delta in [timedelta(days=-1), timedelta(days=1)]:
+ loc_dt = dt + delta
+ idx = max(0, bisect_right(
+ self._utc_transition_times, loc_dt) - 1)
+ inf = self._transition_info[idx]
+ tzinfo = self._tzinfos[inf]
+ loc_dt = tzinfo.normalize(dt.replace(tzinfo=tzinfo))
+ if loc_dt.replace(tzinfo=None) == dt:
+ possible_loc_dt.add(loc_dt)
+
+ if len(possible_loc_dt) == 1:
+ return possible_loc_dt.pop()
+
+ # If there are no possibly correct timezones, we are attempting
+ # to convert a time that never happened - the time period jumped
+ # during the start-of-DST transition period.
+ if len(possible_loc_dt) == 0:
+ # If we refuse to guess, raise an exception.
+ if is_dst is None:
+ raise NonExistentTimeError(dt)
+
+ # If we are forcing the pre-DST side of the DST transition, we
+ # obtain the correct timezone by winding the clock forward a few
+ # hours.
+ elif is_dst:
+ return self.localize(
+ dt + timedelta(hours=6), is_dst=True) - timedelta(hours=6)
+
+ # If we are forcing the post-DST side of the DST transition, we
+ # obtain the correct timezone by winding the clock back.
+ else:
+ return self.localize(
+ dt - timedelta(hours=6), is_dst=False) + timedelta(hours=6)
+
+
+ # If we get this far, we have multiple possible timezones - this
+ # is an ambiguous case occuring during the end-of-DST transition.
+
+ # If told to be strict, raise an exception since we have an
+ # ambiguous case
+ if is_dst is None:
+ raise AmbiguousTimeError(dt)
+
+ # Filter out the possiblilities that don't match the requested
+ # is_dst
+ filtered_possible_loc_dt = [
+ p for p in possible_loc_dt
+ if bool(p.tzinfo._dst) == is_dst
+ ]
+
+ # Hopefully we only have one possibility left. Return it.
+ if len(filtered_possible_loc_dt) == 1:
+ return filtered_possible_loc_dt[0]
+
+ if len(filtered_possible_loc_dt) == 0:
+ filtered_possible_loc_dt = list(possible_loc_dt)
+
+ # If we get this far, we have in a wierd timezone transition
+ # where the clocks have been wound back but is_dst is the same
+ # in both (eg. Europe/Warsaw 1915 when they switched to CET).
+ # At this point, we just have to guess unless we allow more
+ # hints to be passed in (such as the UTC offset or abbreviation),
+ # but that is just getting silly.
+ #
+ # Choose the earliest (by UTC) applicable timezone if is_dst=True
+ # Choose the latest (by UTC) applicable timezone if is_dst=False
+ # i.e., behave like end-of-DST transition
+ dates = {} # utc -> local
+ for local_dt in filtered_possible_loc_dt:
+ utc_time = local_dt.replace(tzinfo=None) - local_dt.tzinfo._utcoffset
+ assert utc_time not in dates
+ dates[utc_time] = local_dt
+ return dates[[min, max][not is_dst](dates)]
+
+ def utcoffset(self, dt, is_dst=None):
+ '''See datetime.tzinfo.utcoffset
+
+ The is_dst parameter may be used to remove ambiguity during DST
+ transitions.
+
+ >>> from pytz import timezone
+ >>> tz = timezone('America/St_Johns')
+ >>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+ >>> tz.utcoffset(ambiguous, is_dst=False)
+ datetime.timedelta(-1, 73800)
+
+ >>> tz.utcoffset(ambiguous, is_dst=True)
+ datetime.timedelta(-1, 77400)
+
+ >>> try:
+ ... tz.utcoffset(ambiguous)
+ ... except AmbiguousTimeError:
+ ... print('Ambiguous')
+ Ambiguous
+
+ '''
+ if dt is None:
+ return None
+ elif dt.tzinfo is not self:
+ dt = self.localize(dt, is_dst)
+ return dt.tzinfo._utcoffset
+ else:
+ return self._utcoffset
+
+ def dst(self, dt, is_dst=None):
+ '''See datetime.tzinfo.dst
+
+ The is_dst parameter may be used to remove ambiguity during DST
+ transitions.
+
+ >>> from pytz import timezone
+ >>> tz = timezone('America/St_Johns')
+
+ >>> normal = datetime(2009, 9, 1)
+
+ >>> tz.dst(normal)
+ datetime.timedelta(0, 3600)
+ >>> tz.dst(normal, is_dst=False)
+ datetime.timedelta(0, 3600)
+ >>> tz.dst(normal, is_dst=True)
+ datetime.timedelta(0, 3600)
+
+ >>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+ >>> tz.dst(ambiguous, is_dst=False)
+ datetime.timedelta(0)
+ >>> tz.dst(ambiguous, is_dst=True)
+ datetime.timedelta(0, 3600)
+ >>> try:
+ ... tz.dst(ambiguous)
+ ... except AmbiguousTimeError:
+ ... print('Ambiguous')
+ Ambiguous
+
+ '''
+ if dt is None:
+ return None
+ elif dt.tzinfo is not self:
+ dt = self.localize(dt, is_dst)
+ return dt.tzinfo._dst
+ else:
+ return self._dst
+
+ def tzname(self, dt, is_dst=None):
+ '''See datetime.tzinfo.tzname
+
+ The is_dst parameter may be used to remove ambiguity during DST
+ transitions.
+
+ >>> from pytz import timezone
+ >>> tz = timezone('America/St_Johns')
+
+ >>> normal = datetime(2009, 9, 1)
+
+ >>> tz.tzname(normal)
+ 'NDT'
+ >>> tz.tzname(normal, is_dst=False)
+ 'NDT'
+ >>> tz.tzname(normal, is_dst=True)
+ 'NDT'
+
+ >>> ambiguous = datetime(2009, 10, 31, 23, 30)
+
+ >>> tz.tzname(ambiguous, is_dst=False)
+ 'NST'
+ >>> tz.tzname(ambiguous, is_dst=True)
+ 'NDT'
+ >>> try:
+ ... tz.tzname(ambiguous)
+ ... except AmbiguousTimeError:
+ ... print('Ambiguous')
+ Ambiguous
+ '''
+ if dt is None:
+ return self.zone
+ elif dt.tzinfo is not self:
+ dt = self.localize(dt, is_dst)
+ return dt.tzinfo._tzname
+ else:
+ return self._tzname
+
+ def __repr__(self):
+ if self._dst:
+ dst = 'DST'
+ else:
+ dst = 'STD'
+ if self._utcoffset > _notime:
+ return '<DstTzInfo %r %s+%s %s>' % (
+ self.zone, self._tzname, self._utcoffset, dst
+ )
+ else:
+ return '<DstTzInfo %r %s%s %s>' % (
+ self.zone, self._tzname, self._utcoffset, dst
+ )
+
+ def __reduce__(self):
+ # Special pickle to zone remains a singleton and to cope with
+ # database changes.
+ return pytz._p, (
+ self.zone,
+ _to_seconds(self._utcoffset),
+ _to_seconds(self._dst),
+ self._tzname
+ )
+
+
+
+def unpickler(zone, utcoffset=None, dstoffset=None, tzname=None):
+ """Factory function for unpickling pytz tzinfo instances.
+
+ This is shared for both StaticTzInfo and DstTzInfo instances, because
+ database changes could cause a zones implementation to switch between
+ these two base classes and we can't break pickles on a pytz version
+ upgrade.
+ """
+ # Raises a KeyError if zone no longer exists, which should never happen
+ # and would be a bug.
+ tz = pytz.timezone(zone)
+
+ # A StaticTzInfo - just return it
+ if utcoffset is None:
+ return tz
+
+ # This pickle was created from a DstTzInfo. We need to
+ # determine which of the list of tzinfo instances for this zone
+ # to use in order to restore the state of any datetime instances using
+ # it correctly.
+ utcoffset = memorized_timedelta(utcoffset)
+ dstoffset = memorized_timedelta(dstoffset)
+ try:
+ return tz._tzinfos[(utcoffset, dstoffset, tzname)]
+ except KeyError:
+ # The particular state requested in this timezone no longer exists.
+ # This indicates a corrupt pickle, or the timezone database has been
+ # corrected violently enough to make this particular
+ # (utcoffset,dstoffset) no longer exist in the zone, or the
+ # abbreviation has been changed.
+ pass
+
+ # See if we can find an entry differing only by tzname. Abbreviations
+ # get changed from the initial guess by the database maintainers to
+ # match reality when this information is discovered.
+ for localized_tz in tz._tzinfos.values():
+ if (localized_tz._utcoffset == utcoffset
+ and localized_tz._dst == dstoffset):
+ return localized_tz
+
+ # This (utcoffset, dstoffset) information has been removed from the
+ # zone. Add it back. This might occur when the database maintainers have
+ # corrected incorrect information. datetime instances using this
+ # incorrect information will continue to do so, exactly as they were
+ # before being pickled. This is purely an overly paranoid safety net - I
+ # doubt this will ever been needed in real life.
+ inf = (utcoffset, dstoffset, tzname)
+ tz._tzinfos[inf] = tz.__class__(inf, tz._tzinfos)
+ return tz._tzinfos[inf]
diff --git a/pytz/zoneinfo/Africa/Abidjan b/pytz/zoneinfo/Africa/Abidjan
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Abidjan
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Accra b/pytz/zoneinfo/Africa/Accra
new file mode 100644
index 0000000..6ff8fb6
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Accra
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Addis_Ababa b/pytz/zoneinfo/Africa/Addis_Ababa
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Addis_Ababa
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Algiers b/pytz/zoneinfo/Africa/Algiers
new file mode 100644
index 0000000..2a25f3a
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Algiers
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Asmara b/pytz/zoneinfo/Africa/Asmara
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Asmara
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Asmera b/pytz/zoneinfo/Africa/Asmera
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Asmera
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Bamako b/pytz/zoneinfo/Africa/Bamako
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Bamako
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Bangui b/pytz/zoneinfo/Africa/Bangui
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Bangui
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Banjul b/pytz/zoneinfo/Africa/Banjul
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Banjul
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Bissau b/pytz/zoneinfo/Africa/Bissau
new file mode 100644
index 0000000..0696667
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Bissau
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Blantyre b/pytz/zoneinfo/Africa/Blantyre
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Blantyre
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Brazzaville b/pytz/zoneinfo/Africa/Brazzaville
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Brazzaville
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Bujumbura b/pytz/zoneinfo/Africa/Bujumbura
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Bujumbura
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Cairo b/pytz/zoneinfo/Africa/Cairo
new file mode 100644
index 0000000..0eeed11
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Cairo
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Casablanca b/pytz/zoneinfo/Africa/Casablanca
new file mode 100644
index 0000000..c001c37
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Casablanca
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Ceuta b/pytz/zoneinfo/Africa/Ceuta
new file mode 100644
index 0000000..6227e2b
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Ceuta
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Conakry b/pytz/zoneinfo/Africa/Conakry
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Conakry
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Dakar b/pytz/zoneinfo/Africa/Dakar
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Dakar
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Dar_es_Salaam b/pytz/zoneinfo/Africa/Dar_es_Salaam
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Dar_es_Salaam
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Djibouti b/pytz/zoneinfo/Africa/Djibouti
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Djibouti
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Douala b/pytz/zoneinfo/Africa/Douala
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Douala
Binary files differ
diff --git a/pytz/zoneinfo/Africa/El_Aaiun b/pytz/zoneinfo/Africa/El_Aaiun
new file mode 100644
index 0000000..805d39e
--- /dev/null
+++ b/pytz/zoneinfo/Africa/El_Aaiun
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Freetown b/pytz/zoneinfo/Africa/Freetown
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Freetown
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Gaborone b/pytz/zoneinfo/Africa/Gaborone
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Gaborone
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Harare b/pytz/zoneinfo/Africa/Harare
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Harare
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Johannesburg b/pytz/zoneinfo/Africa/Johannesburg
new file mode 100644
index 0000000..ddf3652
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Johannesburg
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Juba b/pytz/zoneinfo/Africa/Juba
new file mode 100644
index 0000000..3629188
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Juba
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Kampala b/pytz/zoneinfo/Africa/Kampala
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Kampala
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Khartoum b/pytz/zoneinfo/Africa/Khartoum
new file mode 100644
index 0000000..3629188
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Khartoum
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Kigali b/pytz/zoneinfo/Africa/Kigali
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Kigali
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Kinshasa b/pytz/zoneinfo/Africa/Kinshasa
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Kinshasa
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Lagos b/pytz/zoneinfo/Africa/Lagos
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Lagos
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Libreville b/pytz/zoneinfo/Africa/Libreville
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Libreville
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Lome b/pytz/zoneinfo/Africa/Lome
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Lome
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Luanda b/pytz/zoneinfo/Africa/Luanda
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Luanda
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Lubumbashi b/pytz/zoneinfo/Africa/Lubumbashi
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Lubumbashi
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Lusaka b/pytz/zoneinfo/Africa/Lusaka
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Lusaka
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Malabo b/pytz/zoneinfo/Africa/Malabo
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Malabo
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Maputo b/pytz/zoneinfo/Africa/Maputo
new file mode 100644
index 0000000..5b871db
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Maputo
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Maseru b/pytz/zoneinfo/Africa/Maseru
new file mode 100644
index 0000000..ddf3652
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Maseru
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Mbabane b/pytz/zoneinfo/Africa/Mbabane
new file mode 100644
index 0000000..ddf3652
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Mbabane
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Mogadishu b/pytz/zoneinfo/Africa/Mogadishu
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Mogadishu
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Monrovia b/pytz/zoneinfo/Africa/Monrovia
new file mode 100644
index 0000000..0f2294e
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Monrovia
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Nairobi b/pytz/zoneinfo/Africa/Nairobi
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Nairobi
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Ndjamena b/pytz/zoneinfo/Africa/Ndjamena
new file mode 100644
index 0000000..bbfe19d
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Ndjamena
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Niamey b/pytz/zoneinfo/Africa/Niamey
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Niamey
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Nouakchott b/pytz/zoneinfo/Africa/Nouakchott
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Nouakchott
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Ouagadougou b/pytz/zoneinfo/Africa/Ouagadougou
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Ouagadougou
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Porto-Novo b/pytz/zoneinfo/Africa/Porto-Novo
new file mode 100644
index 0000000..b1c97cc
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Porto-Novo
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Sao_Tome b/pytz/zoneinfo/Africa/Sao_Tome
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Sao_Tome
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Timbuktu b/pytz/zoneinfo/Africa/Timbuktu
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Timbuktu
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Tripoli b/pytz/zoneinfo/Africa/Tripoli
new file mode 100644
index 0000000..b32e220
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Tripoli
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Tunis b/pytz/zoneinfo/Africa/Tunis
new file mode 100644
index 0000000..4bd3885
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Tunis
Binary files differ
diff --git a/pytz/zoneinfo/Africa/Windhoek b/pytz/zoneinfo/Africa/Windhoek
new file mode 100644
index 0000000..33bdfdf
--- /dev/null
+++ b/pytz/zoneinfo/Africa/Windhoek
Binary files differ
diff --git a/pytz/zoneinfo/America/Adak b/pytz/zoneinfo/America/Adak
new file mode 100644
index 0000000..b0a5dd6
--- /dev/null
+++ b/pytz/zoneinfo/America/Adak
Binary files differ
diff --git a/pytz/zoneinfo/America/Anchorage b/pytz/zoneinfo/America/Anchorage
new file mode 100644
index 0000000..a4627ca
--- /dev/null
+++ b/pytz/zoneinfo/America/Anchorage
Binary files differ
diff --git a/pytz/zoneinfo/America/Anguilla b/pytz/zoneinfo/America/Anguilla
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Anguilla
Binary files differ
diff --git a/pytz/zoneinfo/America/Antigua b/pytz/zoneinfo/America/Antigua
new file mode 100644
index 0000000..66ab147
--- /dev/null
+++ b/pytz/zoneinfo/America/Antigua
Binary files differ
diff --git a/pytz/zoneinfo/America/Araguaina b/pytz/zoneinfo/America/Araguaina
new file mode 100644
index 0000000..507ea46
--- /dev/null
+++ b/pytz/zoneinfo/America/Araguaina
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Buenos_Aires b/pytz/zoneinfo/America/Argentina/Buenos_Aires
new file mode 100644
index 0000000..a1fae8c
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Buenos_Aires
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Catamarca b/pytz/zoneinfo/America/Argentina/Catamarca
new file mode 100644
index 0000000..7cbc9f4
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Catamarca
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/ComodRivadavia b/pytz/zoneinfo/America/Argentina/ComodRivadavia
new file mode 100644
index 0000000..7cbc9f4
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/ComodRivadavia
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Cordoba b/pytz/zoneinfo/America/Argentina/Cordoba
new file mode 100644
index 0000000..cd97a24
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Cordoba
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Jujuy b/pytz/zoneinfo/America/Argentina/Jujuy
new file mode 100644
index 0000000..7be3eeb
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Jujuy
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/La_Rioja b/pytz/zoneinfo/America/Argentina/La_Rioja
new file mode 100644
index 0000000..1296ed4
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/La_Rioja
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Mendoza b/pytz/zoneinfo/America/Argentina/Mendoza
new file mode 100644
index 0000000..f9eb526
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Mendoza
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Rio_Gallegos b/pytz/zoneinfo/America/Argentina/Rio_Gallegos
new file mode 100644
index 0000000..8fd203d
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Rio_Gallegos
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Salta b/pytz/zoneinfo/America/Argentina/Salta
new file mode 100644
index 0000000..5778059
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Salta
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/San_Juan b/pytz/zoneinfo/America/Argentina/San_Juan
new file mode 100644
index 0000000..8670279
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/San_Juan
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/San_Luis b/pytz/zoneinfo/America/Argentina/San_Luis
new file mode 100644
index 0000000..51eb1d8
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/San_Luis
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Tucuman b/pytz/zoneinfo/America/Argentina/Tucuman
new file mode 100644
index 0000000..694093e
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Tucuman
Binary files differ
diff --git a/pytz/zoneinfo/America/Argentina/Ushuaia b/pytz/zoneinfo/America/Argentina/Ushuaia
new file mode 100644
index 0000000..dc42621
--- /dev/null
+++ b/pytz/zoneinfo/America/Argentina/Ushuaia
Binary files differ
diff --git a/pytz/zoneinfo/America/Aruba b/pytz/zoneinfo/America/Aruba
new file mode 100644
index 0000000..05e77ab
--- /dev/null
+++ b/pytz/zoneinfo/America/Aruba
Binary files differ
diff --git a/pytz/zoneinfo/America/Asuncion b/pytz/zoneinfo/America/Asuncion
new file mode 100644
index 0000000..79541fd
--- /dev/null
+++ b/pytz/zoneinfo/America/Asuncion
Binary files differ
diff --git a/pytz/zoneinfo/America/Atikokan b/pytz/zoneinfo/America/Atikokan
new file mode 100644
index 0000000..5708b55
--- /dev/null
+++ b/pytz/zoneinfo/America/Atikokan
Binary files differ
diff --git a/pytz/zoneinfo/America/Atka b/pytz/zoneinfo/America/Atka
new file mode 100644
index 0000000..b0a5dd6
--- /dev/null
+++ b/pytz/zoneinfo/America/Atka
Binary files differ
diff --git a/pytz/zoneinfo/America/Bahia b/pytz/zoneinfo/America/Bahia
new file mode 100644
index 0000000..3b59958
--- /dev/null
+++ b/pytz/zoneinfo/America/Bahia
Binary files differ
diff --git a/pytz/zoneinfo/America/Bahia_Banderas b/pytz/zoneinfo/America/Bahia_Banderas
new file mode 100644
index 0000000..21e2b71
--- /dev/null
+++ b/pytz/zoneinfo/America/Bahia_Banderas
Binary files differ
diff --git a/pytz/zoneinfo/America/Barbados b/pytz/zoneinfo/America/Barbados
new file mode 100644
index 0000000..6339936
--- /dev/null
+++ b/pytz/zoneinfo/America/Barbados
Binary files differ
diff --git a/pytz/zoneinfo/America/Belem b/pytz/zoneinfo/America/Belem
new file mode 100644
index 0000000..d85c0f7
--- /dev/null
+++ b/pytz/zoneinfo/America/Belem
Binary files differ
diff --git a/pytz/zoneinfo/America/Belize b/pytz/zoneinfo/America/Belize
new file mode 100644
index 0000000..eada52e
--- /dev/null
+++ b/pytz/zoneinfo/America/Belize
Binary files differ
diff --git a/pytz/zoneinfo/America/Blanc-Sablon b/pytz/zoneinfo/America/Blanc-Sablon
new file mode 100644
index 0000000..abcde7d
--- /dev/null
+++ b/pytz/zoneinfo/America/Blanc-Sablon
Binary files differ
diff --git a/pytz/zoneinfo/America/Boa_Vista b/pytz/zoneinfo/America/Boa_Vista
new file mode 100644
index 0000000..2466a25
--- /dev/null
+++ b/pytz/zoneinfo/America/Boa_Vista
Binary files differ
diff --git a/pytz/zoneinfo/America/Bogota b/pytz/zoneinfo/America/Bogota
new file mode 100644
index 0000000..7a5a445
--- /dev/null
+++ b/pytz/zoneinfo/America/Bogota
Binary files differ
diff --git a/pytz/zoneinfo/America/Boise b/pytz/zoneinfo/America/Boise
new file mode 100644
index 0000000..ada6d64
--- /dev/null
+++ b/pytz/zoneinfo/America/Boise
Binary files differ
diff --git a/pytz/zoneinfo/America/Buenos_Aires b/pytz/zoneinfo/America/Buenos_Aires
new file mode 100644
index 0000000..a1fae8c
--- /dev/null
+++ b/pytz/zoneinfo/America/Buenos_Aires
Binary files differ
diff --git a/pytz/zoneinfo/America/Cambridge_Bay b/pytz/zoneinfo/America/Cambridge_Bay
new file mode 100644
index 0000000..58e21ba
--- /dev/null
+++ b/pytz/zoneinfo/America/Cambridge_Bay
Binary files differ
diff --git a/pytz/zoneinfo/America/Campo_Grande b/pytz/zoneinfo/America/Campo_Grande
new file mode 100644
index 0000000..d810ae5
--- /dev/null
+++ b/pytz/zoneinfo/America/Campo_Grande
Binary files differ
diff --git a/pytz/zoneinfo/America/Cancun b/pytz/zoneinfo/America/Cancun
new file mode 100644
index 0000000..a99eedd
--- /dev/null
+++ b/pytz/zoneinfo/America/Cancun
Binary files differ
diff --git a/pytz/zoneinfo/America/Caracas b/pytz/zoneinfo/America/Caracas
new file mode 100644
index 0000000..15b9a52
--- /dev/null
+++ b/pytz/zoneinfo/America/Caracas
Binary files differ
diff --git a/pytz/zoneinfo/America/Catamarca b/pytz/zoneinfo/America/Catamarca
new file mode 100644
index 0000000..7cbc9f4
--- /dev/null
+++ b/pytz/zoneinfo/America/Catamarca
Binary files differ
diff --git a/pytz/zoneinfo/America/Cayenne b/pytz/zoneinfo/America/Cayenne
new file mode 100644
index 0000000..bffe9b0
--- /dev/null
+++ b/pytz/zoneinfo/America/Cayenne
Binary files differ
diff --git a/pytz/zoneinfo/America/Cayman b/pytz/zoneinfo/America/Cayman
new file mode 100644
index 0000000..0eb14b7
--- /dev/null
+++ b/pytz/zoneinfo/America/Cayman
Binary files differ
diff --git a/pytz/zoneinfo/America/Chicago b/pytz/zoneinfo/America/Chicago
new file mode 100644
index 0000000..3dd8f0f
--- /dev/null
+++ b/pytz/zoneinfo/America/Chicago
Binary files differ
diff --git a/pytz/zoneinfo/America/Chihuahua b/pytz/zoneinfo/America/Chihuahua
new file mode 100644
index 0000000..e3adbdb
--- /dev/null
+++ b/pytz/zoneinfo/America/Chihuahua
Binary files differ
diff --git a/pytz/zoneinfo/America/Coral_Harbour b/pytz/zoneinfo/America/Coral_Harbour
new file mode 100644
index 0000000..5708b55
--- /dev/null
+++ b/pytz/zoneinfo/America/Coral_Harbour
Binary files differ
diff --git a/pytz/zoneinfo/America/Cordoba b/pytz/zoneinfo/America/Cordoba
new file mode 100644
index 0000000..cd97a24
--- /dev/null
+++ b/pytz/zoneinfo/America/Cordoba
Binary files differ
diff --git a/pytz/zoneinfo/America/Costa_Rica b/pytz/zoneinfo/America/Costa_Rica
new file mode 100644
index 0000000..c247133
--- /dev/null
+++ b/pytz/zoneinfo/America/Costa_Rica
Binary files differ
diff --git a/pytz/zoneinfo/America/Creston b/pytz/zoneinfo/America/Creston
new file mode 100644
index 0000000..798f627
--- /dev/null
+++ b/pytz/zoneinfo/America/Creston
Binary files differ
diff --git a/pytz/zoneinfo/America/Cuiaba b/pytz/zoneinfo/America/Cuiaba
new file mode 100644
index 0000000..e3aec8c
--- /dev/null
+++ b/pytz/zoneinfo/America/Cuiaba
Binary files differ
diff --git a/pytz/zoneinfo/America/Curacao b/pytz/zoneinfo/America/Curacao
new file mode 100644
index 0000000..05e77ab
--- /dev/null
+++ b/pytz/zoneinfo/America/Curacao
Binary files differ
diff --git a/pytz/zoneinfo/America/Danmarkshavn b/pytz/zoneinfo/America/Danmarkshavn
new file mode 100644
index 0000000..a8b58ad
--- /dev/null
+++ b/pytz/zoneinfo/America/Danmarkshavn
Binary files differ
diff --git a/pytz/zoneinfo/America/Dawson b/pytz/zoneinfo/America/Dawson
new file mode 100644
index 0000000..61c9688
--- /dev/null
+++ b/pytz/zoneinfo/America/Dawson
Binary files differ
diff --git a/pytz/zoneinfo/America/Dawson_Creek b/pytz/zoneinfo/America/Dawson_Creek
new file mode 100644
index 0000000..78f9076
--- /dev/null
+++ b/pytz/zoneinfo/America/Dawson_Creek
Binary files differ
diff --git a/pytz/zoneinfo/America/Denver b/pytz/zoneinfo/America/Denver
new file mode 100644
index 0000000..7fc6691
--- /dev/null
+++ b/pytz/zoneinfo/America/Denver
Binary files differ
diff --git a/pytz/zoneinfo/America/Detroit b/pytz/zoneinfo/America/Detroit
new file mode 100644
index 0000000..a123b33
--- /dev/null
+++ b/pytz/zoneinfo/America/Detroit
Binary files differ
diff --git a/pytz/zoneinfo/America/Dominica b/pytz/zoneinfo/America/Dominica
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Dominica
Binary files differ
diff --git a/pytz/zoneinfo/America/Edmonton b/pytz/zoneinfo/America/Edmonton
new file mode 100644
index 0000000..d02fbcd
--- /dev/null
+++ b/pytz/zoneinfo/America/Edmonton
Binary files differ
diff --git a/pytz/zoneinfo/America/Eirunepe b/pytz/zoneinfo/America/Eirunepe
new file mode 100644
index 0000000..3359731
--- /dev/null
+++ b/pytz/zoneinfo/America/Eirunepe
Binary files differ
diff --git a/pytz/zoneinfo/America/El_Salvador b/pytz/zoneinfo/America/El_Salvador
new file mode 100644
index 0000000..9b8bc7a
--- /dev/null
+++ b/pytz/zoneinfo/America/El_Salvador
Binary files differ
diff --git a/pytz/zoneinfo/America/Ensenada b/pytz/zoneinfo/America/Ensenada
new file mode 100644
index 0000000..1387475
--- /dev/null
+++ b/pytz/zoneinfo/America/Ensenada
Binary files differ
diff --git a/pytz/zoneinfo/America/Fort_Wayne b/pytz/zoneinfo/America/Fort_Wayne
new file mode 100644
index 0000000..4a92c06
--- /dev/null
+++ b/pytz/zoneinfo/America/Fort_Wayne
Binary files differ
diff --git a/pytz/zoneinfo/America/Fortaleza b/pytz/zoneinfo/America/Fortaleza
new file mode 100644
index 0000000..c0bcf4d
--- /dev/null
+++ b/pytz/zoneinfo/America/Fortaleza
Binary files differ
diff --git a/pytz/zoneinfo/America/Glace_Bay b/pytz/zoneinfo/America/Glace_Bay
new file mode 100644
index 0000000..f58522b
--- /dev/null
+++ b/pytz/zoneinfo/America/Glace_Bay
Binary files differ
diff --git a/pytz/zoneinfo/America/Godthab b/pytz/zoneinfo/America/Godthab
new file mode 100644
index 0000000..111d9a8
--- /dev/null
+++ b/pytz/zoneinfo/America/Godthab
Binary files differ
diff --git a/pytz/zoneinfo/America/Goose_Bay b/pytz/zoneinfo/America/Goose_Bay
new file mode 100644
index 0000000..b4b945e
--- /dev/null
+++ b/pytz/zoneinfo/America/Goose_Bay
Binary files differ
diff --git a/pytz/zoneinfo/America/Grand_Turk b/pytz/zoneinfo/America/Grand_Turk
new file mode 100644
index 0000000..331aeac
--- /dev/null
+++ b/pytz/zoneinfo/America/Grand_Turk
Binary files differ
diff --git a/pytz/zoneinfo/America/Grenada b/pytz/zoneinfo/America/Grenada
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Grenada
Binary files differ
diff --git a/pytz/zoneinfo/America/Guadeloupe b/pytz/zoneinfo/America/Guadeloupe
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Guadeloupe
Binary files differ
diff --git a/pytz/zoneinfo/America/Guatemala b/pytz/zoneinfo/America/Guatemala
new file mode 100644
index 0000000..abf943b
--- /dev/null
+++ b/pytz/zoneinfo/America/Guatemala
Binary files differ
diff --git a/pytz/zoneinfo/America/Guayaquil b/pytz/zoneinfo/America/Guayaquil
new file mode 100644
index 0000000..0828904
--- /dev/null
+++ b/pytz/zoneinfo/America/Guayaquil
Binary files differ
diff --git a/pytz/zoneinfo/America/Guyana b/pytz/zoneinfo/America/Guyana
new file mode 100644
index 0000000..036dbe0
--- /dev/null
+++ b/pytz/zoneinfo/America/Guyana
Binary files differ
diff --git a/pytz/zoneinfo/America/Halifax b/pytz/zoneinfo/America/Halifax
new file mode 100644
index 0000000..f86ece4
--- /dev/null
+++ b/pytz/zoneinfo/America/Halifax
Binary files differ
diff --git a/pytz/zoneinfo/America/Havana b/pytz/zoneinfo/America/Havana
new file mode 100644
index 0000000..1a58fcd
--- /dev/null
+++ b/pytz/zoneinfo/America/Havana
Binary files differ
diff --git a/pytz/zoneinfo/America/Hermosillo b/pytz/zoneinfo/America/Hermosillo
new file mode 100644
index 0000000..ec435c2
--- /dev/null
+++ b/pytz/zoneinfo/America/Hermosillo
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Indianapolis b/pytz/zoneinfo/America/Indiana/Indianapolis
new file mode 100644
index 0000000..4a92c06
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Indianapolis
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Knox b/pytz/zoneinfo/America/Indiana/Knox
new file mode 100644
index 0000000..cc785da
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Knox
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Marengo b/pytz/zoneinfo/America/Indiana/Marengo
new file mode 100644
index 0000000..a23d7b7
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Marengo
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Petersburg b/pytz/zoneinfo/America/Indiana/Petersburg
new file mode 100644
index 0000000..f16cb30
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Petersburg
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Tell_City b/pytz/zoneinfo/America/Indiana/Tell_City
new file mode 100644
index 0000000..0250bf9
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Tell_City
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Vevay b/pytz/zoneinfo/America/Indiana/Vevay
new file mode 100644
index 0000000..e934de6
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Vevay
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Vincennes b/pytz/zoneinfo/America/Indiana/Vincennes
new file mode 100644
index 0000000..adbdbee
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Vincennes
Binary files differ
diff --git a/pytz/zoneinfo/America/Indiana/Winamac b/pytz/zoneinfo/America/Indiana/Winamac
new file mode 100644
index 0000000..b34f7b2
--- /dev/null
+++ b/pytz/zoneinfo/America/Indiana/Winamac
Binary files differ
diff --git a/pytz/zoneinfo/America/Indianapolis b/pytz/zoneinfo/America/Indianapolis
new file mode 100644
index 0000000..4a92c06
--- /dev/null
+++ b/pytz/zoneinfo/America/Indianapolis
Binary files differ
diff --git a/pytz/zoneinfo/America/Inuvik b/pytz/zoneinfo/America/Inuvik
new file mode 100644
index 0000000..077fad4
--- /dev/null
+++ b/pytz/zoneinfo/America/Inuvik
Binary files differ
diff --git a/pytz/zoneinfo/America/Iqaluit b/pytz/zoneinfo/America/Iqaluit
new file mode 100644
index 0000000..e67b71f
--- /dev/null
+++ b/pytz/zoneinfo/America/Iqaluit
Binary files differ
diff --git a/pytz/zoneinfo/America/Jamaica b/pytz/zoneinfo/America/Jamaica
new file mode 100644
index 0000000..006689b
--- /dev/null
+++ b/pytz/zoneinfo/America/Jamaica
Binary files differ
diff --git a/pytz/zoneinfo/America/Jujuy b/pytz/zoneinfo/America/Jujuy
new file mode 100644
index 0000000..7be3eeb
--- /dev/null
+++ b/pytz/zoneinfo/America/Jujuy
Binary files differ
diff --git a/pytz/zoneinfo/America/Juneau b/pytz/zoneinfo/America/Juneau
new file mode 100644
index 0000000..ade50a8
--- /dev/null
+++ b/pytz/zoneinfo/America/Juneau
Binary files differ
diff --git a/pytz/zoneinfo/America/Kentucky/Louisville b/pytz/zoneinfo/America/Kentucky/Louisville
new file mode 100644
index 0000000..fdf2e88
--- /dev/null
+++ b/pytz/zoneinfo/America/Kentucky/Louisville
Binary files differ
diff --git a/pytz/zoneinfo/America/Kentucky/Monticello b/pytz/zoneinfo/America/Kentucky/Monticello
new file mode 100644
index 0000000..60991aa
--- /dev/null
+++ b/pytz/zoneinfo/America/Kentucky/Monticello
Binary files differ
diff --git a/pytz/zoneinfo/America/Knox_IN b/pytz/zoneinfo/America/Knox_IN
new file mode 100644
index 0000000..cc785da
--- /dev/null
+++ b/pytz/zoneinfo/America/Knox_IN
Binary files differ
diff --git a/pytz/zoneinfo/America/Kralendijk b/pytz/zoneinfo/America/Kralendijk
new file mode 100644
index 0000000..05e77ab
--- /dev/null
+++ b/pytz/zoneinfo/America/Kralendijk
Binary files differ
diff --git a/pytz/zoneinfo/America/La_Paz b/pytz/zoneinfo/America/La_Paz
new file mode 100644
index 0000000..cedf0b3
--- /dev/null
+++ b/pytz/zoneinfo/America/La_Paz
Binary files differ
diff --git a/pytz/zoneinfo/America/Lima b/pytz/zoneinfo/America/Lima
new file mode 100644
index 0000000..789fa5c
--- /dev/null
+++ b/pytz/zoneinfo/America/Lima
Binary files differ
diff --git a/pytz/zoneinfo/America/Los_Angeles b/pytz/zoneinfo/America/Los_Angeles
new file mode 100644
index 0000000..1fa9149
--- /dev/null
+++ b/pytz/zoneinfo/America/Los_Angeles
Binary files differ
diff --git a/pytz/zoneinfo/America/Louisville b/pytz/zoneinfo/America/Louisville
new file mode 100644
index 0000000..fdf2e88
--- /dev/null
+++ b/pytz/zoneinfo/America/Louisville
Binary files differ
diff --git a/pytz/zoneinfo/America/Lower_Princes b/pytz/zoneinfo/America/Lower_Princes
new file mode 100644
index 0000000..05e77ab
--- /dev/null
+++ b/pytz/zoneinfo/America/Lower_Princes
Binary files differ
diff --git a/pytz/zoneinfo/America/Maceio b/pytz/zoneinfo/America/Maceio
new file mode 100644
index 0000000..de74990
--- /dev/null
+++ b/pytz/zoneinfo/America/Maceio
Binary files differ
diff --git a/pytz/zoneinfo/America/Managua b/pytz/zoneinfo/America/Managua
new file mode 100644
index 0000000..c543ffd
--- /dev/null
+++ b/pytz/zoneinfo/America/Managua
Binary files differ
diff --git a/pytz/zoneinfo/America/Manaus b/pytz/zoneinfo/America/Manaus
new file mode 100644
index 0000000..e0222f1
--- /dev/null
+++ b/pytz/zoneinfo/America/Manaus
Binary files differ
diff --git a/pytz/zoneinfo/America/Marigot b/pytz/zoneinfo/America/Marigot
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Marigot
Binary files differ
diff --git a/pytz/zoneinfo/America/Martinique b/pytz/zoneinfo/America/Martinique
new file mode 100644
index 0000000..f9e2399
--- /dev/null
+++ b/pytz/zoneinfo/America/Martinique
Binary files differ
diff --git a/pytz/zoneinfo/America/Matamoros b/pytz/zoneinfo/America/Matamoros
new file mode 100644
index 0000000..5671d25
--- /dev/null
+++ b/pytz/zoneinfo/America/Matamoros
Binary files differ
diff --git a/pytz/zoneinfo/America/Mazatlan b/pytz/zoneinfo/America/Mazatlan
new file mode 100644
index 0000000..afa94c2
--- /dev/null
+++ b/pytz/zoneinfo/America/Mazatlan
Binary files differ
diff --git a/pytz/zoneinfo/America/Mendoza b/pytz/zoneinfo/America/Mendoza
new file mode 100644
index 0000000..f9eb526
--- /dev/null
+++ b/pytz/zoneinfo/America/Mendoza
Binary files differ
diff --git a/pytz/zoneinfo/America/Menominee b/pytz/zoneinfo/America/Menominee
new file mode 100644
index 0000000..55d6e32
--- /dev/null
+++ b/pytz/zoneinfo/America/Menominee
Binary files differ
diff --git a/pytz/zoneinfo/America/Merida b/pytz/zoneinfo/America/Merida
new file mode 100644
index 0000000..ecc1856
--- /dev/null
+++ b/pytz/zoneinfo/America/Merida
Binary files differ
diff --git a/pytz/zoneinfo/America/Metlakatla b/pytz/zoneinfo/America/Metlakatla
new file mode 100644
index 0000000..e66cc34
--- /dev/null
+++ b/pytz/zoneinfo/America/Metlakatla
Binary files differ
diff --git a/pytz/zoneinfo/America/Mexico_City b/pytz/zoneinfo/America/Mexico_City
new file mode 100644
index 0000000..f11e3d2
--- /dev/null
+++ b/pytz/zoneinfo/America/Mexico_City
Binary files differ
diff --git a/pytz/zoneinfo/America/Miquelon b/pytz/zoneinfo/America/Miquelon
new file mode 100644
index 0000000..36f6696
--- /dev/null
+++ b/pytz/zoneinfo/America/Miquelon
Binary files differ
diff --git a/pytz/zoneinfo/America/Moncton b/pytz/zoneinfo/America/Moncton
new file mode 100644
index 0000000..51cb1ba
--- /dev/null
+++ b/pytz/zoneinfo/America/Moncton
Binary files differ
diff --git a/pytz/zoneinfo/America/Monterrey b/pytz/zoneinfo/America/Monterrey
new file mode 100644
index 0000000..dcac92b
--- /dev/null
+++ b/pytz/zoneinfo/America/Monterrey
Binary files differ
diff --git a/pytz/zoneinfo/America/Montevideo b/pytz/zoneinfo/America/Montevideo
new file mode 100644
index 0000000..ab3d680
--- /dev/null
+++ b/pytz/zoneinfo/America/Montevideo
Binary files differ
diff --git a/pytz/zoneinfo/America/Montreal b/pytz/zoneinfo/America/Montreal
new file mode 100644
index 0000000..89b9f49
--- /dev/null
+++ b/pytz/zoneinfo/America/Montreal
Binary files differ
diff --git a/pytz/zoneinfo/America/Montserrat b/pytz/zoneinfo/America/Montserrat
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Montserrat
Binary files differ
diff --git a/pytz/zoneinfo/America/Nassau b/pytz/zoneinfo/America/Nassau
new file mode 100644
index 0000000..e5d0289
--- /dev/null
+++ b/pytz/zoneinfo/America/Nassau
Binary files differ
diff --git a/pytz/zoneinfo/America/New_York b/pytz/zoneinfo/America/New_York
new file mode 100644
index 0000000..7553fee
--- /dev/null
+++ b/pytz/zoneinfo/America/New_York
Binary files differ
diff --git a/pytz/zoneinfo/America/Nipigon b/pytz/zoneinfo/America/Nipigon
new file mode 100644
index 0000000..f8a0292
--- /dev/null
+++ b/pytz/zoneinfo/America/Nipigon
Binary files differ
diff --git a/pytz/zoneinfo/America/Nome b/pytz/zoneinfo/America/Nome
new file mode 100644
index 0000000..d370ab1
--- /dev/null
+++ b/pytz/zoneinfo/America/Nome
Binary files differ
diff --git a/pytz/zoneinfo/America/Noronha b/pytz/zoneinfo/America/Noronha
new file mode 100644
index 0000000..774b14e
--- /dev/null
+++ b/pytz/zoneinfo/America/Noronha
Binary files differ
diff --git a/pytz/zoneinfo/America/North_Dakota/Beulah b/pytz/zoneinfo/America/North_Dakota/Beulah
new file mode 100644
index 0000000..8174c88
--- /dev/null
+++ b/pytz/zoneinfo/America/North_Dakota/Beulah
Binary files differ
diff --git a/pytz/zoneinfo/America/North_Dakota/Center b/pytz/zoneinfo/America/North_Dakota/Center
new file mode 100644
index 0000000..8035b24
--- /dev/null
+++ b/pytz/zoneinfo/America/North_Dakota/Center
Binary files differ
diff --git a/pytz/zoneinfo/America/North_Dakota/New_Salem b/pytz/zoneinfo/America/North_Dakota/New_Salem
new file mode 100644
index 0000000..5b630ee
--- /dev/null
+++ b/pytz/zoneinfo/America/North_Dakota/New_Salem
Binary files differ
diff --git a/pytz/zoneinfo/America/Ojinaga b/pytz/zoneinfo/America/Ojinaga
new file mode 100644
index 0000000..190c5c8
--- /dev/null
+++ b/pytz/zoneinfo/America/Ojinaga
Binary files differ
diff --git a/pytz/zoneinfo/America/Panama b/pytz/zoneinfo/America/Panama
new file mode 100644
index 0000000..5c1c063
--- /dev/null
+++ b/pytz/zoneinfo/America/Panama
Binary files differ
diff --git a/pytz/zoneinfo/America/Pangnirtung b/pytz/zoneinfo/America/Pangnirtung
new file mode 100644
index 0000000..994da43
--- /dev/null
+++ b/pytz/zoneinfo/America/Pangnirtung
Binary files differ
diff --git a/pytz/zoneinfo/America/Paramaribo b/pytz/zoneinfo/America/Paramaribo
new file mode 100644
index 0000000..2f05b23
--- /dev/null
+++ b/pytz/zoneinfo/America/Paramaribo
Binary files differ
diff --git a/pytz/zoneinfo/America/Phoenix b/pytz/zoneinfo/America/Phoenix
new file mode 100644
index 0000000..adf2823
--- /dev/null
+++ b/pytz/zoneinfo/America/Phoenix
Binary files differ
diff --git a/pytz/zoneinfo/America/Port-au-Prince b/pytz/zoneinfo/America/Port-au-Prince
new file mode 100644
index 0000000..dd8895c
--- /dev/null
+++ b/pytz/zoneinfo/America/Port-au-Prince
Binary files differ
diff --git a/pytz/zoneinfo/America/Port_of_Spain b/pytz/zoneinfo/America/Port_of_Spain
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Port_of_Spain
Binary files differ
diff --git a/pytz/zoneinfo/America/Porto_Acre b/pytz/zoneinfo/America/Porto_Acre
new file mode 100644
index 0000000..788d0e9
--- /dev/null
+++ b/pytz/zoneinfo/America/Porto_Acre
Binary files differ
diff --git a/pytz/zoneinfo/America/Porto_Velho b/pytz/zoneinfo/America/Porto_Velho
new file mode 100644
index 0000000..aa8cf31
--- /dev/null
+++ b/pytz/zoneinfo/America/Porto_Velho
Binary files differ
diff --git a/pytz/zoneinfo/America/Puerto_Rico b/pytz/zoneinfo/America/Puerto_Rico
new file mode 100644
index 0000000..d4525a6
--- /dev/null
+++ b/pytz/zoneinfo/America/Puerto_Rico
Binary files differ
diff --git a/pytz/zoneinfo/America/Rainy_River b/pytz/zoneinfo/America/Rainy_River
new file mode 100644
index 0000000..70dcd2d
--- /dev/null
+++ b/pytz/zoneinfo/America/Rainy_River
Binary files differ
diff --git a/pytz/zoneinfo/America/Rankin_Inlet b/pytz/zoneinfo/America/Rankin_Inlet
new file mode 100644
index 0000000..cc15d83
--- /dev/null
+++ b/pytz/zoneinfo/America/Rankin_Inlet
Binary files differ
diff --git a/pytz/zoneinfo/America/Recife b/pytz/zoneinfo/America/Recife
new file mode 100644
index 0000000..f0ad7b9
--- /dev/null
+++ b/pytz/zoneinfo/America/Recife
Binary files differ
diff --git a/pytz/zoneinfo/America/Regina b/pytz/zoneinfo/America/Regina
new file mode 100644
index 0000000..5fe8d6b
--- /dev/null
+++ b/pytz/zoneinfo/America/Regina
Binary files differ
diff --git a/pytz/zoneinfo/America/Resolute b/pytz/zoneinfo/America/Resolute
new file mode 100644
index 0000000..5307941
--- /dev/null
+++ b/pytz/zoneinfo/America/Resolute
Binary files differ
diff --git a/pytz/zoneinfo/America/Rio_Branco b/pytz/zoneinfo/America/Rio_Branco
new file mode 100644
index 0000000..788d0e9
--- /dev/null
+++ b/pytz/zoneinfo/America/Rio_Branco
Binary files differ
diff --git a/pytz/zoneinfo/America/Rosario b/pytz/zoneinfo/America/Rosario
new file mode 100644
index 0000000..cd97a24
--- /dev/null
+++ b/pytz/zoneinfo/America/Rosario
Binary files differ
diff --git a/pytz/zoneinfo/America/Santa_Isabel b/pytz/zoneinfo/America/Santa_Isabel
new file mode 100644
index 0000000..e1c4d16
--- /dev/null
+++ b/pytz/zoneinfo/America/Santa_Isabel
Binary files differ
diff --git a/pytz/zoneinfo/America/Santarem b/pytz/zoneinfo/America/Santarem
new file mode 100644
index 0000000..bb469d3
--- /dev/null
+++ b/pytz/zoneinfo/America/Santarem
Binary files differ
diff --git a/pytz/zoneinfo/America/Santiago b/pytz/zoneinfo/America/Santiago
new file mode 100644
index 0000000..92cf559
--- /dev/null
+++ b/pytz/zoneinfo/America/Santiago
Binary files differ
diff --git a/pytz/zoneinfo/America/Santo_Domingo b/pytz/zoneinfo/America/Santo_Domingo
new file mode 100644
index 0000000..77eab31
--- /dev/null
+++ b/pytz/zoneinfo/America/Santo_Domingo
Binary files differ
diff --git a/pytz/zoneinfo/America/Sao_Paulo b/pytz/zoneinfo/America/Sao_Paulo
new file mode 100644
index 0000000..552ce7c
--- /dev/null
+++ b/pytz/zoneinfo/America/Sao_Paulo
Binary files differ
diff --git a/pytz/zoneinfo/America/Scoresbysund b/pytz/zoneinfo/America/Scoresbysund
new file mode 100644
index 0000000..85676ca
--- /dev/null
+++ b/pytz/zoneinfo/America/Scoresbysund
Binary files differ
diff --git a/pytz/zoneinfo/America/Shiprock b/pytz/zoneinfo/America/Shiprock
new file mode 100644
index 0000000..7fc6691
--- /dev/null
+++ b/pytz/zoneinfo/America/Shiprock
Binary files differ
diff --git a/pytz/zoneinfo/America/Sitka b/pytz/zoneinfo/America/Sitka
new file mode 100644
index 0000000..48fc6af
--- /dev/null
+++ b/pytz/zoneinfo/America/Sitka
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Barthelemy b/pytz/zoneinfo/America/St_Barthelemy
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Barthelemy
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Johns b/pytz/zoneinfo/America/St_Johns
new file mode 100644
index 0000000..a1d1485
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Johns
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Kitts b/pytz/zoneinfo/America/St_Kitts
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Kitts
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Lucia b/pytz/zoneinfo/America/St_Lucia
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Lucia
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Thomas b/pytz/zoneinfo/America/St_Thomas
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Thomas
Binary files differ
diff --git a/pytz/zoneinfo/America/St_Vincent b/pytz/zoneinfo/America/St_Vincent
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/St_Vincent
Binary files differ
diff --git a/pytz/zoneinfo/America/Swift_Current b/pytz/zoneinfo/America/Swift_Current
new file mode 100644
index 0000000..4db1300
--- /dev/null
+++ b/pytz/zoneinfo/America/Swift_Current
Binary files differ
diff --git a/pytz/zoneinfo/America/Tegucigalpa b/pytz/zoneinfo/America/Tegucigalpa
new file mode 100644
index 0000000..7aea8f9
--- /dev/null
+++ b/pytz/zoneinfo/America/Tegucigalpa
Binary files differ
diff --git a/pytz/zoneinfo/America/Thule b/pytz/zoneinfo/America/Thule
new file mode 100644
index 0000000..deefcc8
--- /dev/null
+++ b/pytz/zoneinfo/America/Thule
Binary files differ
diff --git a/pytz/zoneinfo/America/Thunder_Bay b/pytz/zoneinfo/America/Thunder_Bay
new file mode 100644
index 0000000..aa1d486
--- /dev/null
+++ b/pytz/zoneinfo/America/Thunder_Bay
Binary files differ
diff --git a/pytz/zoneinfo/America/Tijuana b/pytz/zoneinfo/America/Tijuana
new file mode 100644
index 0000000..1387475
--- /dev/null
+++ b/pytz/zoneinfo/America/Tijuana
Binary files differ
diff --git a/pytz/zoneinfo/America/Toronto b/pytz/zoneinfo/America/Toronto
new file mode 100644
index 0000000..7b4682a
--- /dev/null
+++ b/pytz/zoneinfo/America/Toronto
Binary files differ
diff --git a/pytz/zoneinfo/America/Tortola b/pytz/zoneinfo/America/Tortola
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Tortola
Binary files differ
diff --git a/pytz/zoneinfo/America/Vancouver b/pytz/zoneinfo/America/Vancouver
new file mode 100644
index 0000000..9b5d924
--- /dev/null
+++ b/pytz/zoneinfo/America/Vancouver
Binary files differ
diff --git a/pytz/zoneinfo/America/Virgin b/pytz/zoneinfo/America/Virgin
new file mode 100644
index 0000000..447efbe
--- /dev/null
+++ b/pytz/zoneinfo/America/Virgin
Binary files differ
diff --git a/pytz/zoneinfo/America/Whitehorse b/pytz/zoneinfo/America/Whitehorse
new file mode 100644
index 0000000..8604c5c
--- /dev/null
+++ b/pytz/zoneinfo/America/Whitehorse
Binary files differ
diff --git a/pytz/zoneinfo/America/Winnipeg b/pytz/zoneinfo/America/Winnipeg
new file mode 100644
index 0000000..2ffe3d8
--- /dev/null
+++ b/pytz/zoneinfo/America/Winnipeg
Binary files differ
diff --git a/pytz/zoneinfo/America/Yakutat b/pytz/zoneinfo/America/Yakutat
new file mode 100644
index 0000000..f3d7399
--- /dev/null
+++ b/pytz/zoneinfo/America/Yakutat
Binary files differ
diff --git a/pytz/zoneinfo/America/Yellowknife b/pytz/zoneinfo/America/Yellowknife
new file mode 100644
index 0000000..21cba6e
--- /dev/null
+++ b/pytz/zoneinfo/America/Yellowknife
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Casey b/pytz/zoneinfo/Antarctica/Casey
new file mode 100644
index 0000000..c2a9905
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Casey
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Davis b/pytz/zoneinfo/Antarctica/Davis
new file mode 100644
index 0000000..7321c67
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Davis
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/DumontDUrville b/pytz/zoneinfo/Antarctica/DumontDUrville
new file mode 100644
index 0000000..c406b8d
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/DumontDUrville
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Macquarie b/pytz/zoneinfo/Antarctica/Macquarie
new file mode 100644
index 0000000..fc7b96f
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Macquarie
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Mawson b/pytz/zoneinfo/Antarctica/Mawson
new file mode 100644
index 0000000..6c5b0fa
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Mawson
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/McMurdo b/pytz/zoneinfo/Antarctica/McMurdo
new file mode 100644
index 0000000..a5f5b6d
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/McMurdo
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Palmer b/pytz/zoneinfo/Antarctica/Palmer
new file mode 100644
index 0000000..9e9cdd0
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Palmer
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Rothera b/pytz/zoneinfo/Antarctica/Rothera
new file mode 100644
index 0000000..28f82ba
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Rothera
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/South_Pole b/pytz/zoneinfo/Antarctica/South_Pole
new file mode 100644
index 0000000..a5f5b6d
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/South_Pole
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Syowa b/pytz/zoneinfo/Antarctica/Syowa
new file mode 100644
index 0000000..b837b07
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Syowa
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Troll b/pytz/zoneinfo/Antarctica/Troll
new file mode 100644
index 0000000..d973a12
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Troll
Binary files differ
diff --git a/pytz/zoneinfo/Antarctica/Vostok b/pytz/zoneinfo/Antarctica/Vostok
new file mode 100644
index 0000000..cbec909
--- /dev/null
+++ b/pytz/zoneinfo/Antarctica/Vostok
Binary files differ
diff --git a/pytz/zoneinfo/Arctic/Longyearbyen b/pytz/zoneinfo/Arctic/Longyearbyen
new file mode 100644
index 0000000..239c017
--- /dev/null
+++ b/pytz/zoneinfo/Arctic/Longyearbyen
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Aden b/pytz/zoneinfo/Asia/Aden
new file mode 100644
index 0000000..505e1d2
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Aden
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Almaty b/pytz/zoneinfo/Asia/Almaty
new file mode 100644
index 0000000..75a007d
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Almaty
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Amman b/pytz/zoneinfo/Asia/Amman
new file mode 100644
index 0000000..c3f0994
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Amman
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Anadyr b/pytz/zoneinfo/Asia/Anadyr
new file mode 100644
index 0000000..766594b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Anadyr
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Aqtau b/pytz/zoneinfo/Asia/Aqtau
new file mode 100644
index 0000000..811ed2f
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Aqtau
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Aqtobe b/pytz/zoneinfo/Asia/Aqtobe
new file mode 100644
index 0000000..ff3b96b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Aqtobe
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ashgabat b/pytz/zoneinfo/Asia/Ashgabat
new file mode 100644
index 0000000..f79fe04
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ashgabat
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ashkhabad b/pytz/zoneinfo/Asia/Ashkhabad
new file mode 100644
index 0000000..f79fe04
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ashkhabad
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Baghdad b/pytz/zoneinfo/Asia/Baghdad
new file mode 100644
index 0000000..f0a96ec
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Baghdad
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Bahrain b/pytz/zoneinfo/Asia/Bahrain
new file mode 100644
index 0000000..cda04a1
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Bahrain
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Baku b/pytz/zoneinfo/Asia/Baku
new file mode 100644
index 0000000..f78e764
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Baku
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Bangkok b/pytz/zoneinfo/Asia/Bangkok
new file mode 100644
index 0000000..e8e7627
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Bangkok
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Beirut b/pytz/zoneinfo/Asia/Beirut
new file mode 100644
index 0000000..72f0896
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Beirut
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Bishkek b/pytz/zoneinfo/Asia/Bishkek
new file mode 100644
index 0000000..eee8278
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Bishkek
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Brunei b/pytz/zoneinfo/Asia/Brunei
new file mode 100644
index 0000000..1ac3115
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Brunei
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Calcutta b/pytz/zoneinfo/Asia/Calcutta
new file mode 100644
index 0000000..3c0d5ab
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Calcutta
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Chita b/pytz/zoneinfo/Asia/Chita
new file mode 100644
index 0000000..c090654
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Chita
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Choibalsan b/pytz/zoneinfo/Asia/Choibalsan
new file mode 100644
index 0000000..f099092
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Choibalsan
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Chongqing b/pytz/zoneinfo/Asia/Chongqing
new file mode 100644
index 0000000..dbd132f
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Chongqing
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Chungking b/pytz/zoneinfo/Asia/Chungking
new file mode 100644
index 0000000..dbd132f
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Chungking
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Colombo b/pytz/zoneinfo/Asia/Colombo
new file mode 100644
index 0000000..d10439a
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Colombo
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Dacca b/pytz/zoneinfo/Asia/Dacca
new file mode 100644
index 0000000..b6b326b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Dacca
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Damascus b/pytz/zoneinfo/Asia/Damascus
new file mode 100644
index 0000000..ac45764
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Damascus
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Dhaka b/pytz/zoneinfo/Asia/Dhaka
new file mode 100644
index 0000000..b6b326b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Dhaka
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Dili b/pytz/zoneinfo/Asia/Dili
new file mode 100644
index 0000000..8124fb7
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Dili
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Dubai b/pytz/zoneinfo/Asia/Dubai
new file mode 100644
index 0000000..415e443
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Dubai
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Dushanbe b/pytz/zoneinfo/Asia/Dushanbe
new file mode 100644
index 0000000..3b1e978
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Dushanbe
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Gaza b/pytz/zoneinfo/Asia/Gaza
new file mode 100644
index 0000000..bd683e8
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Gaza
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Harbin b/pytz/zoneinfo/Asia/Harbin
new file mode 100644
index 0000000..dbd132f
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Harbin
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Hebron b/pytz/zoneinfo/Asia/Hebron
new file mode 100644
index 0000000..0bc7674
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Hebron
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ho_Chi_Minh b/pytz/zoneinfo/Asia/Ho_Chi_Minh
new file mode 100644
index 0000000..c142265
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ho_Chi_Minh
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Hong_Kong b/pytz/zoneinfo/Asia/Hong_Kong
new file mode 100644
index 0000000..dc9058e
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Hong_Kong
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Hovd b/pytz/zoneinfo/Asia/Hovd
new file mode 100644
index 0000000..71c3cad
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Hovd
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Irkutsk b/pytz/zoneinfo/Asia/Irkutsk
new file mode 100644
index 0000000..1e94a47
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Irkutsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Istanbul b/pytz/zoneinfo/Asia/Istanbul
new file mode 100644
index 0000000..d89aa3a
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Istanbul
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Jakarta b/pytz/zoneinfo/Asia/Jakarta
new file mode 100644
index 0000000..3130bff
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Jakarta
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Jayapura b/pytz/zoneinfo/Asia/Jayapura
new file mode 100644
index 0000000..a9d1217
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Jayapura
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Jerusalem b/pytz/zoneinfo/Asia/Jerusalem
new file mode 100644
index 0000000..df51199
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Jerusalem
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kabul b/pytz/zoneinfo/Asia/Kabul
new file mode 100644
index 0000000..266cc7e
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kabul
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kamchatka b/pytz/zoneinfo/Asia/Kamchatka
new file mode 100644
index 0000000..a0541cf
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kamchatka
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Karachi b/pytz/zoneinfo/Asia/Karachi
new file mode 100644
index 0000000..6a6de1b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Karachi
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kashgar b/pytz/zoneinfo/Asia/Kashgar
new file mode 100644
index 0000000..964a5c2
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kashgar
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kathmandu b/pytz/zoneinfo/Asia/Kathmandu
new file mode 100644
index 0000000..2824709
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kathmandu
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Katmandu b/pytz/zoneinfo/Asia/Katmandu
new file mode 100644
index 0000000..2824709
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Katmandu
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Khandyga b/pytz/zoneinfo/Asia/Khandyga
new file mode 100644
index 0000000..26becb3
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Khandyga
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kolkata b/pytz/zoneinfo/Asia/Kolkata
new file mode 100644
index 0000000..3c0d5ab
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kolkata
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Krasnoyarsk b/pytz/zoneinfo/Asia/Krasnoyarsk
new file mode 100644
index 0000000..3107809
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Krasnoyarsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kuala_Lumpur b/pytz/zoneinfo/Asia/Kuala_Lumpur
new file mode 100644
index 0000000..35b987d
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kuala_Lumpur
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kuching b/pytz/zoneinfo/Asia/Kuching
new file mode 100644
index 0000000..4f891db
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kuching
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Kuwait b/pytz/zoneinfo/Asia/Kuwait
new file mode 100644
index 0000000..5623811
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Kuwait
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Macao b/pytz/zoneinfo/Asia/Macao
new file mode 100644
index 0000000..b8f9c36
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Macao
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Macau b/pytz/zoneinfo/Asia/Macau
new file mode 100644
index 0000000..b8f9c36
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Macau
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Magadan b/pytz/zoneinfo/Asia/Magadan
new file mode 100644
index 0000000..e09c4dc
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Magadan
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Makassar b/pytz/zoneinfo/Asia/Makassar
new file mode 100644
index 0000000..0d68923
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Makassar
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Manila b/pytz/zoneinfo/Asia/Manila
new file mode 100644
index 0000000..ac0f3a6
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Manila
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Muscat b/pytz/zoneinfo/Asia/Muscat
new file mode 100644
index 0000000..53a2219
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Muscat
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Nicosia b/pytz/zoneinfo/Asia/Nicosia
new file mode 100644
index 0000000..3e663b2
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Nicosia
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Novokuznetsk b/pytz/zoneinfo/Asia/Novokuznetsk
new file mode 100644
index 0000000..1176866
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Novokuznetsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Novosibirsk b/pytz/zoneinfo/Asia/Novosibirsk
new file mode 100644
index 0000000..ed6d7dc
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Novosibirsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Omsk b/pytz/zoneinfo/Asia/Omsk
new file mode 100644
index 0000000..760c391
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Omsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Oral b/pytz/zoneinfo/Asia/Oral
new file mode 100644
index 0000000..1467caf
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Oral
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Phnom_Penh b/pytz/zoneinfo/Asia/Phnom_Penh
new file mode 100644
index 0000000..e8e7627
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Phnom_Penh
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Pontianak b/pytz/zoneinfo/Asia/Pontianak
new file mode 100644
index 0000000..dcd7014
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Pontianak
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Pyongyang b/pytz/zoneinfo/Asia/Pyongyang
new file mode 100644
index 0000000..b04bf74
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Pyongyang
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Qatar b/pytz/zoneinfo/Asia/Qatar
new file mode 100644
index 0000000..3e20373
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Qatar
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Qyzylorda b/pytz/zoneinfo/Asia/Qyzylorda
new file mode 100644
index 0000000..ce53516
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Qyzylorda
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Rangoon b/pytz/zoneinfo/Asia/Rangoon
new file mode 100644
index 0000000..934ca7e
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Rangoon
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Riyadh b/pytz/zoneinfo/Asia/Riyadh
new file mode 100644
index 0000000..c35e42a
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Riyadh
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Saigon b/pytz/zoneinfo/Asia/Saigon
new file mode 100644
index 0000000..c142265
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Saigon
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Sakhalin b/pytz/zoneinfo/Asia/Sakhalin
new file mode 100644
index 0000000..ec62afc
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Sakhalin
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Samarkand b/pytz/zoneinfo/Asia/Samarkand
new file mode 100644
index 0000000..65fb5b0
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Samarkand
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Seoul b/pytz/zoneinfo/Asia/Seoul
new file mode 100644
index 0000000..fd91d5b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Seoul
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Shanghai b/pytz/zoneinfo/Asia/Shanghai
new file mode 100644
index 0000000..dbd132f
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Shanghai
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Singapore b/pytz/zoneinfo/Asia/Singapore
new file mode 100644
index 0000000..9dd49cb
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Singapore
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Srednekolymsk b/pytz/zoneinfo/Asia/Srednekolymsk
new file mode 100644
index 0000000..0929f66
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Srednekolymsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Taipei b/pytz/zoneinfo/Asia/Taipei
new file mode 100644
index 0000000..4810a0b
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Taipei
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Tashkent b/pytz/zoneinfo/Asia/Tashkent
new file mode 100644
index 0000000..1f59faa
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Tashkent
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Tbilisi b/pytz/zoneinfo/Asia/Tbilisi
new file mode 100644
index 0000000..0d7081e
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Tbilisi
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Tehran b/pytz/zoneinfo/Asia/Tehran
new file mode 100644
index 0000000..8710781
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Tehran
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Tel_Aviv b/pytz/zoneinfo/Asia/Tel_Aviv
new file mode 100644
index 0000000..df51199
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Tel_Aviv
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Thimbu b/pytz/zoneinfo/Asia/Thimbu
new file mode 100644
index 0000000..0bd94cb
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Thimbu
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Thimphu b/pytz/zoneinfo/Asia/Thimphu
new file mode 100644
index 0000000..0bd94cb
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Thimphu
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Tokyo b/pytz/zoneinfo/Asia/Tokyo
new file mode 100644
index 0000000..0244140
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Tokyo
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ujung_Pandang b/pytz/zoneinfo/Asia/Ujung_Pandang
new file mode 100644
index 0000000..0d68923
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ujung_Pandang
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ulaanbaatar b/pytz/zoneinfo/Asia/Ulaanbaatar
new file mode 100644
index 0000000..61505e9
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ulaanbaatar
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ulan_Bator b/pytz/zoneinfo/Asia/Ulan_Bator
new file mode 100644
index 0000000..61505e9
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ulan_Bator
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Urumqi b/pytz/zoneinfo/Asia/Urumqi
new file mode 100644
index 0000000..964a5c2
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Urumqi
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Ust-Nera b/pytz/zoneinfo/Asia/Ust-Nera
new file mode 100644
index 0000000..0efacd6
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Ust-Nera
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Vientiane b/pytz/zoneinfo/Asia/Vientiane
new file mode 100644
index 0000000..e8e7627
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Vientiane
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Vladivostok b/pytz/zoneinfo/Asia/Vladivostok
new file mode 100644
index 0000000..156c8e6
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Vladivostok
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Yakutsk b/pytz/zoneinfo/Asia/Yakutsk
new file mode 100644
index 0000000..58ff25e
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Yakutsk
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Yekaterinburg b/pytz/zoneinfo/Asia/Yekaterinburg
new file mode 100644
index 0000000..a1baafa
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Yekaterinburg
Binary files differ
diff --git a/pytz/zoneinfo/Asia/Yerevan b/pytz/zoneinfo/Asia/Yerevan
new file mode 100644
index 0000000..fa62c24
--- /dev/null
+++ b/pytz/zoneinfo/Asia/Yerevan
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Azores b/pytz/zoneinfo/Atlantic/Azores
new file mode 100644
index 0000000..1f53253
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Azores
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Bermuda b/pytz/zoneinfo/Atlantic/Bermuda
new file mode 100644
index 0000000..548d979
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Bermuda
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Canary b/pytz/zoneinfo/Atlantic/Canary
new file mode 100644
index 0000000..007dcf4
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Canary
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Cape_Verde b/pytz/zoneinfo/Atlantic/Cape_Verde
new file mode 100644
index 0000000..18b676c
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Cape_Verde
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Faeroe b/pytz/zoneinfo/Atlantic/Faeroe
new file mode 100644
index 0000000..c486518
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Faeroe
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Faroe b/pytz/zoneinfo/Atlantic/Faroe
new file mode 100644
index 0000000..c486518
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Faroe
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Jan_Mayen b/pytz/zoneinfo/Atlantic/Jan_Mayen
new file mode 100644
index 0000000..239c017
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Jan_Mayen
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Madeira b/pytz/zoneinfo/Atlantic/Madeira
new file mode 100644
index 0000000..3687fd6
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Madeira
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Reykjavik b/pytz/zoneinfo/Atlantic/Reykjavik
new file mode 100644
index 0000000..35ba7a1
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Reykjavik
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/South_Georgia b/pytz/zoneinfo/Atlantic/South_Georgia
new file mode 100644
index 0000000..b1191c9
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/South_Georgia
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/St_Helena b/pytz/zoneinfo/Atlantic/St_Helena
new file mode 100644
index 0000000..6fd1af3
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/St_Helena
Binary files differ
diff --git a/pytz/zoneinfo/Atlantic/Stanley b/pytz/zoneinfo/Atlantic/Stanley
new file mode 100644
index 0000000..aec7a5d
--- /dev/null
+++ b/pytz/zoneinfo/Atlantic/Stanley
Binary files differ
diff --git a/pytz/zoneinfo/Australia/ACT b/pytz/zoneinfo/Australia/ACT
new file mode 100644
index 0000000..aaed12c
--- /dev/null
+++ b/pytz/zoneinfo/Australia/ACT
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Adelaide b/pytz/zoneinfo/Australia/Adelaide
new file mode 100644
index 0000000..4f331a8
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Adelaide
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Brisbane b/pytz/zoneinfo/Australia/Brisbane
new file mode 100644
index 0000000..a327d83
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Brisbane
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Broken_Hill b/pytz/zoneinfo/Australia/Broken_Hill
new file mode 100644
index 0000000..768b167
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Broken_Hill
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Canberra b/pytz/zoneinfo/Australia/Canberra
new file mode 100644
index 0000000..aaed12c
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Canberra
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Currie b/pytz/zoneinfo/Australia/Currie
new file mode 100644
index 0000000..a3f6f29
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Currie
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Darwin b/pytz/zoneinfo/Australia/Darwin
new file mode 100644
index 0000000..c6ae9a7
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Darwin
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Eucla b/pytz/zoneinfo/Australia/Eucla
new file mode 100644
index 0000000..baba07a
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Eucla
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Hobart b/pytz/zoneinfo/Australia/Hobart
new file mode 100644
index 0000000..07784ce
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Hobart
Binary files differ
diff --git a/pytz/zoneinfo/Australia/LHI b/pytz/zoneinfo/Australia/LHI
new file mode 100644
index 0000000..a653e51
--- /dev/null
+++ b/pytz/zoneinfo/Australia/LHI
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Lindeman b/pytz/zoneinfo/Australia/Lindeman
new file mode 100644
index 0000000..71ca143
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Lindeman
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Lord_Howe b/pytz/zoneinfo/Australia/Lord_Howe
new file mode 100644
index 0000000..a653e51
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Lord_Howe
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Melbourne b/pytz/zoneinfo/Australia/Melbourne
new file mode 100644
index 0000000..ec8dfe0
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Melbourne
Binary files differ
diff --git a/pytz/zoneinfo/Australia/NSW b/pytz/zoneinfo/Australia/NSW
new file mode 100644
index 0000000..aaed12c
--- /dev/null
+++ b/pytz/zoneinfo/Australia/NSW
Binary files differ
diff --git a/pytz/zoneinfo/Australia/North b/pytz/zoneinfo/Australia/North
new file mode 100644
index 0000000..c6ae9a7
--- /dev/null
+++ b/pytz/zoneinfo/Australia/North
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Perth b/pytz/zoneinfo/Australia/Perth
new file mode 100644
index 0000000..85c26d5
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Perth
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Queensland b/pytz/zoneinfo/Australia/Queensland
new file mode 100644
index 0000000..a327d83
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Queensland
Binary files differ
diff --git a/pytz/zoneinfo/Australia/South b/pytz/zoneinfo/Australia/South
new file mode 100644
index 0000000..4f331a8
--- /dev/null
+++ b/pytz/zoneinfo/Australia/South
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Sydney b/pytz/zoneinfo/Australia/Sydney
new file mode 100644
index 0000000..aaed12c
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Sydney
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Tasmania b/pytz/zoneinfo/Australia/Tasmania
new file mode 100644
index 0000000..07784ce
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Tasmania
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Victoria b/pytz/zoneinfo/Australia/Victoria
new file mode 100644
index 0000000..ec8dfe0
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Victoria
Binary files differ
diff --git a/pytz/zoneinfo/Australia/West b/pytz/zoneinfo/Australia/West
new file mode 100644
index 0000000..85c26d5
--- /dev/null
+++ b/pytz/zoneinfo/Australia/West
Binary files differ
diff --git a/pytz/zoneinfo/Australia/Yancowinna b/pytz/zoneinfo/Australia/Yancowinna
new file mode 100644
index 0000000..768b167
--- /dev/null
+++ b/pytz/zoneinfo/Australia/Yancowinna
Binary files differ
diff --git a/pytz/zoneinfo/Brazil/Acre b/pytz/zoneinfo/Brazil/Acre
new file mode 100644
index 0000000..788d0e9
--- /dev/null
+++ b/pytz/zoneinfo/Brazil/Acre
Binary files differ
diff --git a/pytz/zoneinfo/Brazil/DeNoronha b/pytz/zoneinfo/Brazil/DeNoronha
new file mode 100644
index 0000000..774b14e
--- /dev/null
+++ b/pytz/zoneinfo/Brazil/DeNoronha
Binary files differ
diff --git a/pytz/zoneinfo/Brazil/East b/pytz/zoneinfo/Brazil/East
new file mode 100644
index 0000000..552ce7c
--- /dev/null
+++ b/pytz/zoneinfo/Brazil/East
Binary files differ
diff --git a/pytz/zoneinfo/Brazil/West b/pytz/zoneinfo/Brazil/West
new file mode 100644
index 0000000..e0222f1
--- /dev/null
+++ b/pytz/zoneinfo/Brazil/West
Binary files differ
diff --git a/pytz/zoneinfo/CET b/pytz/zoneinfo/CET
new file mode 100644
index 0000000..4c4f8ef
--- /dev/null
+++ b/pytz/zoneinfo/CET
Binary files differ
diff --git a/pytz/zoneinfo/CST6CDT b/pytz/zoneinfo/CST6CDT
new file mode 100644
index 0000000..5c8a1d9
--- /dev/null
+++ b/pytz/zoneinfo/CST6CDT
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Atlantic b/pytz/zoneinfo/Canada/Atlantic
new file mode 100644
index 0000000..f86ece4
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Atlantic
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Central b/pytz/zoneinfo/Canada/Central
new file mode 100644
index 0000000..2ffe3d8
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Central
Binary files differ
diff --git a/pytz/zoneinfo/Canada/East-Saskatchewan b/pytz/zoneinfo/Canada/East-Saskatchewan
new file mode 100644
index 0000000..5fe8d6b
--- /dev/null
+++ b/pytz/zoneinfo/Canada/East-Saskatchewan
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Eastern b/pytz/zoneinfo/Canada/Eastern
new file mode 100644
index 0000000..7b4682a
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Eastern
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Mountain b/pytz/zoneinfo/Canada/Mountain
new file mode 100644
index 0000000..d02fbcd
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Mountain
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Newfoundland b/pytz/zoneinfo/Canada/Newfoundland
new file mode 100644
index 0000000..a1d1485
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Newfoundland
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Pacific b/pytz/zoneinfo/Canada/Pacific
new file mode 100644
index 0000000..9b5d924
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Pacific
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Saskatchewan b/pytz/zoneinfo/Canada/Saskatchewan
new file mode 100644
index 0000000..5fe8d6b
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Saskatchewan
Binary files differ
diff --git a/pytz/zoneinfo/Canada/Yukon b/pytz/zoneinfo/Canada/Yukon
new file mode 100644
index 0000000..8604c5c
--- /dev/null
+++ b/pytz/zoneinfo/Canada/Yukon
Binary files differ
diff --git a/pytz/zoneinfo/Chile/Continental b/pytz/zoneinfo/Chile/Continental
new file mode 100644
index 0000000..92cf559
--- /dev/null
+++ b/pytz/zoneinfo/Chile/Continental
Binary files differ
diff --git a/pytz/zoneinfo/Chile/EasterIsland b/pytz/zoneinfo/Chile/EasterIsland
new file mode 100644
index 0000000..8c8a6c7
--- /dev/null
+++ b/pytz/zoneinfo/Chile/EasterIsland
Binary files differ
diff --git a/pytz/zoneinfo/Cuba b/pytz/zoneinfo/Cuba
new file mode 100644
index 0000000..1a58fcd
--- /dev/null
+++ b/pytz/zoneinfo/Cuba
Binary files differ
diff --git a/pytz/zoneinfo/EET b/pytz/zoneinfo/EET
new file mode 100644
index 0000000..beb273a
--- /dev/null
+++ b/pytz/zoneinfo/EET
Binary files differ
diff --git a/pytz/zoneinfo/EST b/pytz/zoneinfo/EST
new file mode 100644
index 0000000..ae34663
--- /dev/null
+++ b/pytz/zoneinfo/EST
Binary files differ
diff --git a/pytz/zoneinfo/EST5EDT b/pytz/zoneinfo/EST5EDT
new file mode 100644
index 0000000..54541fc
--- /dev/null
+++ b/pytz/zoneinfo/EST5EDT
Binary files differ
diff --git a/pytz/zoneinfo/Egypt b/pytz/zoneinfo/Egypt
new file mode 100644
index 0000000..0eeed11
--- /dev/null
+++ b/pytz/zoneinfo/Egypt
Binary files differ
diff --git a/pytz/zoneinfo/Eire b/pytz/zoneinfo/Eire
new file mode 100644
index 0000000..a7cffbb
--- /dev/null
+++ b/pytz/zoneinfo/Eire
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT b/pytz/zoneinfo/Etc/GMT
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+0 b/pytz/zoneinfo/Etc/GMT+0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+0
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+1 b/pytz/zoneinfo/Etc/GMT+1
new file mode 100644
index 0000000..2f40cc7
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+1
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+10 b/pytz/zoneinfo/Etc/GMT+10
new file mode 100644
index 0000000..2087965
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+10
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+11 b/pytz/zoneinfo/Etc/GMT+11
new file mode 100644
index 0000000..af4a6b3
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+11
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+12 b/pytz/zoneinfo/Etc/GMT+12
new file mode 100644
index 0000000..f095534
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+12
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+2 b/pytz/zoneinfo/Etc/GMT+2
new file mode 100644
index 0000000..85a1fc1
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+2
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+3 b/pytz/zoneinfo/Etc/GMT+3
new file mode 100644
index 0000000..a24f587
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+3
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+4 b/pytz/zoneinfo/Etc/GMT+4
new file mode 100644
index 0000000..ab74517
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+4
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+5 b/pytz/zoneinfo/Etc/GMT+5
new file mode 100644
index 0000000..01f1d77
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+5
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+6 b/pytz/zoneinfo/Etc/GMT+6
new file mode 100644
index 0000000..3ced48b
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+6
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+7 b/pytz/zoneinfo/Etc/GMT+7
new file mode 100644
index 0000000..5f58127
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+7
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+8 b/pytz/zoneinfo/Etc/GMT+8
new file mode 100644
index 0000000..be23d96
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+8
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT+9 b/pytz/zoneinfo/Etc/GMT+9
new file mode 100644
index 0000000..d00c50c
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT+9
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-0 b/pytz/zoneinfo/Etc/GMT-0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-0
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-1 b/pytz/zoneinfo/Etc/GMT-1
new file mode 100644
index 0000000..088a76e
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-1
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-10 b/pytz/zoneinfo/Etc/GMT-10
new file mode 100644
index 0000000..a4da44f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-10
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-11 b/pytz/zoneinfo/Etc/GMT-11
new file mode 100644
index 0000000..e0112a9
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-11
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-12 b/pytz/zoneinfo/Etc/GMT-12
new file mode 100644
index 0000000..c1e08b7
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-12
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-13 b/pytz/zoneinfo/Etc/GMT-13
new file mode 100644
index 0000000..1ab0519
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-13
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-14 b/pytz/zoneinfo/Etc/GMT-14
new file mode 100644
index 0000000..afaf3fa
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-14
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-2 b/pytz/zoneinfo/Etc/GMT-2
new file mode 100644
index 0000000..6289cad
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-2
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-3 b/pytz/zoneinfo/Etc/GMT-3
new file mode 100644
index 0000000..27434cd
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-3
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-4 b/pytz/zoneinfo/Etc/GMT-4
new file mode 100644
index 0000000..2fc6966
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-4
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-5 b/pytz/zoneinfo/Etc/GMT-5
new file mode 100644
index 0000000..8508e72
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-5
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-6 b/pytz/zoneinfo/Etc/GMT-6
new file mode 100644
index 0000000..5b9678e
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-6
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-7 b/pytz/zoneinfo/Etc/GMT-7
new file mode 100644
index 0000000..ccf4c39
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-7
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-8 b/pytz/zoneinfo/Etc/GMT-8
new file mode 100644
index 0000000..db4cfa6
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-8
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT-9 b/pytz/zoneinfo/Etc/GMT-9
new file mode 100644
index 0000000..56ea117
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT-9
Binary files differ
diff --git a/pytz/zoneinfo/Etc/GMT0 b/pytz/zoneinfo/Etc/GMT0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/GMT0
Binary files differ
diff --git a/pytz/zoneinfo/Etc/Greenwich b/pytz/zoneinfo/Etc/Greenwich
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Etc/Greenwich
Binary files differ
diff --git a/pytz/zoneinfo/Etc/UCT b/pytz/zoneinfo/Etc/UCT
new file mode 100644
index 0000000..40147b9
--- /dev/null
+++ b/pytz/zoneinfo/Etc/UCT
Binary files differ
diff --git a/pytz/zoneinfo/Etc/UTC b/pytz/zoneinfo/Etc/UTC
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/Etc/UTC
Binary files differ
diff --git a/pytz/zoneinfo/Etc/Universal b/pytz/zoneinfo/Etc/Universal
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/Etc/Universal
Binary files differ
diff --git a/pytz/zoneinfo/Etc/Zulu b/pytz/zoneinfo/Etc/Zulu
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/Etc/Zulu
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Amsterdam b/pytz/zoneinfo/Europe/Amsterdam
new file mode 100644
index 0000000..f74769d
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Amsterdam
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Andorra b/pytz/zoneinfo/Europe/Andorra
new file mode 100644
index 0000000..b06de7a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Andorra
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Athens b/pytz/zoneinfo/Europe/Athens
new file mode 100644
index 0000000..0001602
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Athens
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Belfast b/pytz/zoneinfo/Europe/Belfast
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Belfast
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Belgrade b/pytz/zoneinfo/Europe/Belgrade
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Belgrade
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Berlin b/pytz/zoneinfo/Europe/Berlin
new file mode 100644
index 0000000..b4f2a2a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Berlin
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Bratislava b/pytz/zoneinfo/Europe/Bratislava
new file mode 100644
index 0000000..4eabe5c
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Bratislava
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Brussels b/pytz/zoneinfo/Europe/Brussels
new file mode 100644
index 0000000..d8f19a6
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Brussels
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Bucharest b/pytz/zoneinfo/Europe/Bucharest
new file mode 100644
index 0000000..e0eac4c
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Bucharest
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Budapest b/pytz/zoneinfo/Europe/Budapest
new file mode 100644
index 0000000..3ddf6a5
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Budapest
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Busingen b/pytz/zoneinfo/Europe/Busingen
new file mode 100644
index 0000000..9c2b600
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Busingen
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Chisinau b/pytz/zoneinfo/Europe/Chisinau
new file mode 100644
index 0000000..7998b2d
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Chisinau
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Copenhagen b/pytz/zoneinfo/Europe/Copenhagen
new file mode 100644
index 0000000..be87cf1
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Copenhagen
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Dublin b/pytz/zoneinfo/Europe/Dublin
new file mode 100644
index 0000000..a7cffbb
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Dublin
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Gibraltar b/pytz/zoneinfo/Europe/Gibraltar
new file mode 100644
index 0000000..a7105fa
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Gibraltar
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Guernsey b/pytz/zoneinfo/Europe/Guernsey
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Guernsey
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Helsinki b/pytz/zoneinfo/Europe/Helsinki
new file mode 100644
index 0000000..29b3c81
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Helsinki
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Isle_of_Man b/pytz/zoneinfo/Europe/Isle_of_Man
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Isle_of_Man
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Istanbul b/pytz/zoneinfo/Europe/Istanbul
new file mode 100644
index 0000000..d89aa3a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Istanbul
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Jersey b/pytz/zoneinfo/Europe/Jersey
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Jersey
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Kaliningrad b/pytz/zoneinfo/Europe/Kaliningrad
new file mode 100644
index 0000000..4805fe4
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Kaliningrad
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Kiev b/pytz/zoneinfo/Europe/Kiev
new file mode 100644
index 0000000..b3e20a7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Kiev
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Lisbon b/pytz/zoneinfo/Europe/Lisbon
new file mode 100644
index 0000000..b9aff3a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Lisbon
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Ljubljana b/pytz/zoneinfo/Europe/Ljubljana
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Ljubljana
Binary files differ
diff --git a/pytz/zoneinfo/Europe/London b/pytz/zoneinfo/Europe/London
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/Europe/London
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Luxembourg b/pytz/zoneinfo/Europe/Luxembourg
new file mode 100644
index 0000000..6fae86c
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Luxembourg
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Madrid b/pytz/zoneinfo/Europe/Madrid
new file mode 100644
index 0000000..af47432
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Madrid
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Malta b/pytz/zoneinfo/Europe/Malta
new file mode 100644
index 0000000..d251938
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Malta
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Mariehamn b/pytz/zoneinfo/Europe/Mariehamn
new file mode 100644
index 0000000..29b3c81
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Mariehamn
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Minsk b/pytz/zoneinfo/Europe/Minsk
new file mode 100644
index 0000000..28ef30a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Minsk
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Monaco b/pytz/zoneinfo/Europe/Monaco
new file mode 100644
index 0000000..0b40f1e
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Monaco
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Moscow b/pytz/zoneinfo/Europe/Moscow
new file mode 100644
index 0000000..bdbbaeb
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Moscow
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Nicosia b/pytz/zoneinfo/Europe/Nicosia
new file mode 100644
index 0000000..3e663b2
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Nicosia
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Oslo b/pytz/zoneinfo/Europe/Oslo
new file mode 100644
index 0000000..239c017
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Oslo
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Paris b/pytz/zoneinfo/Europe/Paris
new file mode 100644
index 0000000..cf6e2e2
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Paris
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Podgorica b/pytz/zoneinfo/Europe/Podgorica
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Podgorica
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Prague b/pytz/zoneinfo/Europe/Prague
new file mode 100644
index 0000000..4eabe5c
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Prague
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Riga b/pytz/zoneinfo/Europe/Riga
new file mode 100644
index 0000000..b729ee8
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Riga
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Rome b/pytz/zoneinfo/Europe/Rome
new file mode 100644
index 0000000..5cc3040
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Rome
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Samara b/pytz/zoneinfo/Europe/Samara
new file mode 100644
index 0000000..79759f5
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Samara
Binary files differ
diff --git a/pytz/zoneinfo/Europe/San_Marino b/pytz/zoneinfo/Europe/San_Marino
new file mode 100644
index 0000000..5cc3040
--- /dev/null
+++ b/pytz/zoneinfo/Europe/San_Marino
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Sarajevo b/pytz/zoneinfo/Europe/Sarajevo
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Sarajevo
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Simferopol b/pytz/zoneinfo/Europe/Simferopol
new file mode 100644
index 0000000..ebe9017
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Simferopol
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Skopje b/pytz/zoneinfo/Europe/Skopje
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Skopje
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Sofia b/pytz/zoneinfo/Europe/Sofia
new file mode 100644
index 0000000..763e074
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Sofia
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Stockholm b/pytz/zoneinfo/Europe/Stockholm
new file mode 100644
index 0000000..43c7f2e
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Stockholm
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Tallinn b/pytz/zoneinfo/Europe/Tallinn
new file mode 100644
index 0000000..8a4f124
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Tallinn
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Tirane b/pytz/zoneinfo/Europe/Tirane
new file mode 100644
index 0000000..52c16a4
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Tirane
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Tiraspol b/pytz/zoneinfo/Europe/Tiraspol
new file mode 100644
index 0000000..7998b2d
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Tiraspol
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Uzhgorod b/pytz/zoneinfo/Europe/Uzhgorod
new file mode 100644
index 0000000..8ddba90
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Uzhgorod
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Vaduz b/pytz/zoneinfo/Europe/Vaduz
new file mode 100644
index 0000000..9c2b600
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Vaduz
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Vatican b/pytz/zoneinfo/Europe/Vatican
new file mode 100644
index 0000000..5cc3040
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Vatican
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Vienna b/pytz/zoneinfo/Europe/Vienna
new file mode 100644
index 0000000..9c0fac5
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Vienna
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Vilnius b/pytz/zoneinfo/Europe/Vilnius
new file mode 100644
index 0000000..3b11880
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Vilnius
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Volgograd b/pytz/zoneinfo/Europe/Volgograd
new file mode 100644
index 0000000..c62c32a
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Volgograd
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Warsaw b/pytz/zoneinfo/Europe/Warsaw
new file mode 100644
index 0000000..5cbba41
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Warsaw
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Zagreb b/pytz/zoneinfo/Europe/Zagreb
new file mode 100644
index 0000000..79c25d7
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Zagreb
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Zaporozhye b/pytz/zoneinfo/Europe/Zaporozhye
new file mode 100644
index 0000000..49b568e
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Zaporozhye
Binary files differ
diff --git a/pytz/zoneinfo/Europe/Zurich b/pytz/zoneinfo/Europe/Zurich
new file mode 100644
index 0000000..9c2b600
--- /dev/null
+++ b/pytz/zoneinfo/Europe/Zurich
Binary files differ
diff --git a/pytz/zoneinfo/Factory b/pytz/zoneinfo/Factory
new file mode 100644
index 0000000..6e6c452
--- /dev/null
+++ b/pytz/zoneinfo/Factory
Binary files differ
diff --git a/pytz/zoneinfo/GB b/pytz/zoneinfo/GB
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/GB
Binary files differ
diff --git a/pytz/zoneinfo/GB-Eire b/pytz/zoneinfo/GB-Eire
new file mode 100644
index 0000000..4527515
--- /dev/null
+++ b/pytz/zoneinfo/GB-Eire
Binary files differ
diff --git a/pytz/zoneinfo/GMT b/pytz/zoneinfo/GMT
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/GMT
Binary files differ
diff --git a/pytz/zoneinfo/GMT+0 b/pytz/zoneinfo/GMT+0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/GMT+0
Binary files differ
diff --git a/pytz/zoneinfo/GMT-0 b/pytz/zoneinfo/GMT-0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/GMT-0
Binary files differ
diff --git a/pytz/zoneinfo/GMT0 b/pytz/zoneinfo/GMT0
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/GMT0
Binary files differ
diff --git a/pytz/zoneinfo/Greenwich b/pytz/zoneinfo/Greenwich
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/Greenwich
Binary files differ
diff --git a/pytz/zoneinfo/HST b/pytz/zoneinfo/HST
new file mode 100644
index 0000000..03e4db0
--- /dev/null
+++ b/pytz/zoneinfo/HST
Binary files differ
diff --git a/pytz/zoneinfo/Hongkong b/pytz/zoneinfo/Hongkong
new file mode 100644
index 0000000..dc9058e
--- /dev/null
+++ b/pytz/zoneinfo/Hongkong
Binary files differ
diff --git a/pytz/zoneinfo/Iceland b/pytz/zoneinfo/Iceland
new file mode 100644
index 0000000..35ba7a1
--- /dev/null
+++ b/pytz/zoneinfo/Iceland
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Antananarivo b/pytz/zoneinfo/Indian/Antananarivo
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Antananarivo
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Chagos b/pytz/zoneinfo/Indian/Chagos
new file mode 100644
index 0000000..a616bdf
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Chagos
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Christmas b/pytz/zoneinfo/Indian/Christmas
new file mode 100644
index 0000000..ebcd262
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Christmas
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Cocos b/pytz/zoneinfo/Indian/Cocos
new file mode 100644
index 0000000..cd603f2
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Cocos
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Comoro b/pytz/zoneinfo/Indian/Comoro
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Comoro
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Kerguelen b/pytz/zoneinfo/Indian/Kerguelen
new file mode 100644
index 0000000..462851e
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Kerguelen
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Mahe b/pytz/zoneinfo/Indian/Mahe
new file mode 100644
index 0000000..5f42819
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Mahe
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Maldives b/pytz/zoneinfo/Indian/Maldives
new file mode 100644
index 0000000..cec224f
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Maldives
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Mauritius b/pytz/zoneinfo/Indian/Mauritius
new file mode 100644
index 0000000..66ecc8f
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Mauritius
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Mayotte b/pytz/zoneinfo/Indian/Mayotte
new file mode 100644
index 0000000..750d3dc
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Mayotte
Binary files differ
diff --git a/pytz/zoneinfo/Indian/Reunion b/pytz/zoneinfo/Indian/Reunion
new file mode 100644
index 0000000..c4d0da9
--- /dev/null
+++ b/pytz/zoneinfo/Indian/Reunion
Binary files differ
diff --git a/pytz/zoneinfo/Iran b/pytz/zoneinfo/Iran
new file mode 100644
index 0000000..8710781
--- /dev/null
+++ b/pytz/zoneinfo/Iran
Binary files differ
diff --git a/pytz/zoneinfo/Israel b/pytz/zoneinfo/Israel
new file mode 100644
index 0000000..df51199
--- /dev/null
+++ b/pytz/zoneinfo/Israel
Binary files differ
diff --git a/pytz/zoneinfo/Jamaica b/pytz/zoneinfo/Jamaica
new file mode 100644
index 0000000..006689b
--- /dev/null
+++ b/pytz/zoneinfo/Jamaica
Binary files differ
diff --git a/pytz/zoneinfo/Japan b/pytz/zoneinfo/Japan
new file mode 100644
index 0000000..0244140
--- /dev/null
+++ b/pytz/zoneinfo/Japan
Binary files differ
diff --git a/pytz/zoneinfo/Kwajalein b/pytz/zoneinfo/Kwajalein
new file mode 100644
index 0000000..094c3cf
--- /dev/null
+++ b/pytz/zoneinfo/Kwajalein
Binary files differ
diff --git a/pytz/zoneinfo/Libya b/pytz/zoneinfo/Libya
new file mode 100644
index 0000000..b32e220
--- /dev/null
+++ b/pytz/zoneinfo/Libya
Binary files differ
diff --git a/pytz/zoneinfo/MET b/pytz/zoneinfo/MET
new file mode 100644
index 0000000..71963d5
--- /dev/null
+++ b/pytz/zoneinfo/MET
Binary files differ
diff --git a/pytz/zoneinfo/MST b/pytz/zoneinfo/MST
new file mode 100644
index 0000000..a1bee7c
--- /dev/null
+++ b/pytz/zoneinfo/MST
Binary files differ
diff --git a/pytz/zoneinfo/MST7MDT b/pytz/zoneinfo/MST7MDT
new file mode 100644
index 0000000..726a7e5
--- /dev/null
+++ b/pytz/zoneinfo/MST7MDT
Binary files differ
diff --git a/pytz/zoneinfo/Mexico/BajaNorte b/pytz/zoneinfo/Mexico/BajaNorte
new file mode 100644
index 0000000..1387475
--- /dev/null
+++ b/pytz/zoneinfo/Mexico/BajaNorte
Binary files differ
diff --git a/pytz/zoneinfo/Mexico/BajaSur b/pytz/zoneinfo/Mexico/BajaSur
new file mode 100644
index 0000000..afa94c2
--- /dev/null
+++ b/pytz/zoneinfo/Mexico/BajaSur
Binary files differ
diff --git a/pytz/zoneinfo/Mexico/General b/pytz/zoneinfo/Mexico/General
new file mode 100644
index 0000000..f11e3d2
--- /dev/null
+++ b/pytz/zoneinfo/Mexico/General
Binary files differ
diff --git a/pytz/zoneinfo/NZ b/pytz/zoneinfo/NZ
new file mode 100644
index 0000000..a5f5b6d
--- /dev/null
+++ b/pytz/zoneinfo/NZ
Binary files differ
diff --git a/pytz/zoneinfo/NZ-CHAT b/pytz/zoneinfo/NZ-CHAT
new file mode 100644
index 0000000..59bc4ed
--- /dev/null
+++ b/pytz/zoneinfo/NZ-CHAT
Binary files differ
diff --git a/pytz/zoneinfo/Navajo b/pytz/zoneinfo/Navajo
new file mode 100644
index 0000000..7fc6691
--- /dev/null
+++ b/pytz/zoneinfo/Navajo
Binary files differ
diff --git a/pytz/zoneinfo/PRC b/pytz/zoneinfo/PRC
new file mode 100644
index 0000000..dbd132f
--- /dev/null
+++ b/pytz/zoneinfo/PRC
Binary files differ
diff --git a/pytz/zoneinfo/PST8PDT b/pytz/zoneinfo/PST8PDT
new file mode 100644
index 0000000..6242ac0
--- /dev/null
+++ b/pytz/zoneinfo/PST8PDT
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Apia b/pytz/zoneinfo/Pacific/Apia
new file mode 100644
index 0000000..cc5d2cd
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Apia
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Auckland b/pytz/zoneinfo/Pacific/Auckland
new file mode 100644
index 0000000..a5f5b6d
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Auckland
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Bougainville b/pytz/zoneinfo/Pacific/Bougainville
new file mode 100644
index 0000000..219c78c
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Bougainville
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Chatham b/pytz/zoneinfo/Pacific/Chatham
new file mode 100644
index 0000000..59bc4ed
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Chatham
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Chuuk b/pytz/zoneinfo/Pacific/Chuuk
new file mode 100644
index 0000000..28356bb
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Chuuk
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Easter b/pytz/zoneinfo/Pacific/Easter
new file mode 100644
index 0000000..8c8a6c7
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Easter
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Efate b/pytz/zoneinfo/Pacific/Efate
new file mode 100644
index 0000000..1d99519
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Efate
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Enderbury b/pytz/zoneinfo/Pacific/Enderbury
new file mode 100644
index 0000000..4861052
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Enderbury
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Fakaofo b/pytz/zoneinfo/Pacific/Fakaofo
new file mode 100644
index 0000000..e02e18e
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Fakaofo
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Fiji b/pytz/zoneinfo/Pacific/Fiji
new file mode 100644
index 0000000..b75f194
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Fiji
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Funafuti b/pytz/zoneinfo/Pacific/Funafuti
new file mode 100644
index 0000000..576dea3
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Funafuti
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Galapagos b/pytz/zoneinfo/Pacific/Galapagos
new file mode 100644
index 0000000..c9a7371
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Galapagos
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Gambier b/pytz/zoneinfo/Pacific/Gambier
new file mode 100644
index 0000000..4ab6c20
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Gambier
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Guadalcanal b/pytz/zoneinfo/Pacific/Guadalcanal
new file mode 100644
index 0000000..b183d1e
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Guadalcanal
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Guam b/pytz/zoneinfo/Pacific/Guam
new file mode 100644
index 0000000..4286e6b
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Guam
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Honolulu b/pytz/zoneinfo/Pacific/Honolulu
new file mode 100644
index 0000000..bd85577
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Honolulu
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Johnston b/pytz/zoneinfo/Pacific/Johnston
new file mode 100644
index 0000000..bd85577
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Johnston
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Kiritimati b/pytz/zoneinfo/Pacific/Kiritimati
new file mode 100644
index 0000000..c2eafbc
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Kiritimati
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Kosrae b/pytz/zoneinfo/Pacific/Kosrae
new file mode 100644
index 0000000..66c4d65
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Kosrae
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Kwajalein b/pytz/zoneinfo/Pacific/Kwajalein
new file mode 100644
index 0000000..094c3cf
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Kwajalein
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Majuro b/pytz/zoneinfo/Pacific/Majuro
new file mode 100644
index 0000000..d53b7c2
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Majuro
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Marquesas b/pytz/zoneinfo/Pacific/Marquesas
new file mode 100644
index 0000000..c717c12
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Marquesas
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Midway b/pytz/zoneinfo/Pacific/Midway
new file mode 100644
index 0000000..f2a2f63
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Midway
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Nauru b/pytz/zoneinfo/Pacific/Nauru
new file mode 100644
index 0000000..896ffee
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Nauru
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Niue b/pytz/zoneinfo/Pacific/Niue
new file mode 100644
index 0000000..d772edf
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Niue
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Norfolk b/pytz/zoneinfo/Pacific/Norfolk
new file mode 100644
index 0000000..3a286be
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Norfolk
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Noumea b/pytz/zoneinfo/Pacific/Noumea
new file mode 100644
index 0000000..fcc44e6
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Noumea
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Pago_Pago b/pytz/zoneinfo/Pacific/Pago_Pago
new file mode 100644
index 0000000..1d7649f
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Pago_Pago
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Palau b/pytz/zoneinfo/Pacific/Palau
new file mode 100644
index 0000000..28992d2
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Palau
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Pitcairn b/pytz/zoneinfo/Pacific/Pitcairn
new file mode 100644
index 0000000..d62c648
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Pitcairn
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Pohnpei b/pytz/zoneinfo/Pacific/Pohnpei
new file mode 100644
index 0000000..59bd764
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Pohnpei
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Ponape b/pytz/zoneinfo/Pacific/Ponape
new file mode 100644
index 0000000..59bd764
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Ponape
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Port_Moresby b/pytz/zoneinfo/Pacific/Port_Moresby
new file mode 100644
index 0000000..dffa457
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Port_Moresby
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Rarotonga b/pytz/zoneinfo/Pacific/Rarotonga
new file mode 100644
index 0000000..2a25490
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Rarotonga
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Saipan b/pytz/zoneinfo/Pacific/Saipan
new file mode 100644
index 0000000..c54473c
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Saipan
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Samoa b/pytz/zoneinfo/Pacific/Samoa
new file mode 100644
index 0000000..1d7649f
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Samoa
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Tahiti b/pytz/zoneinfo/Pacific/Tahiti
new file mode 100644
index 0000000..bfc9a7c
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Tahiti
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Tarawa b/pytz/zoneinfo/Pacific/Tarawa
new file mode 100644
index 0000000..1e8189c
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Tarawa
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Tongatapu b/pytz/zoneinfo/Pacific/Tongatapu
new file mode 100644
index 0000000..71d899b
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Tongatapu
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Truk b/pytz/zoneinfo/Pacific/Truk
new file mode 100644
index 0000000..28356bb
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Truk
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Wake b/pytz/zoneinfo/Pacific/Wake
new file mode 100644
index 0000000..9e2a37c
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Wake
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Wallis b/pytz/zoneinfo/Pacific/Wallis
new file mode 100644
index 0000000..b894471
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Wallis
Binary files differ
diff --git a/pytz/zoneinfo/Pacific/Yap b/pytz/zoneinfo/Pacific/Yap
new file mode 100644
index 0000000..28356bb
--- /dev/null
+++ b/pytz/zoneinfo/Pacific/Yap
Binary files differ
diff --git a/pytz/zoneinfo/Poland b/pytz/zoneinfo/Poland
new file mode 100644
index 0000000..5cbba41
--- /dev/null
+++ b/pytz/zoneinfo/Poland
Binary files differ
diff --git a/pytz/zoneinfo/Portugal b/pytz/zoneinfo/Portugal
new file mode 100644
index 0000000..b9aff3a
--- /dev/null
+++ b/pytz/zoneinfo/Portugal
Binary files differ
diff --git a/pytz/zoneinfo/ROC b/pytz/zoneinfo/ROC
new file mode 100644
index 0000000..4810a0b
--- /dev/null
+++ b/pytz/zoneinfo/ROC
Binary files differ
diff --git a/pytz/zoneinfo/ROK b/pytz/zoneinfo/ROK
new file mode 100644
index 0000000..fd91d5b
--- /dev/null
+++ b/pytz/zoneinfo/ROK
Binary files differ
diff --git a/pytz/zoneinfo/Singapore b/pytz/zoneinfo/Singapore
new file mode 100644
index 0000000..9dd49cb
--- /dev/null
+++ b/pytz/zoneinfo/Singapore
Binary files differ
diff --git a/pytz/zoneinfo/Turkey b/pytz/zoneinfo/Turkey
new file mode 100644
index 0000000..d89aa3a
--- /dev/null
+++ b/pytz/zoneinfo/Turkey
Binary files differ
diff --git a/pytz/zoneinfo/UCT b/pytz/zoneinfo/UCT
new file mode 100644
index 0000000..40147b9
--- /dev/null
+++ b/pytz/zoneinfo/UCT
Binary files differ
diff --git a/pytz/zoneinfo/US/Alaska b/pytz/zoneinfo/US/Alaska
new file mode 100644
index 0000000..a4627ca
--- /dev/null
+++ b/pytz/zoneinfo/US/Alaska
Binary files differ
diff --git a/pytz/zoneinfo/US/Aleutian b/pytz/zoneinfo/US/Aleutian
new file mode 100644
index 0000000..b0a5dd6
--- /dev/null
+++ b/pytz/zoneinfo/US/Aleutian
Binary files differ
diff --git a/pytz/zoneinfo/US/Arizona b/pytz/zoneinfo/US/Arizona
new file mode 100644
index 0000000..adf2823
--- /dev/null
+++ b/pytz/zoneinfo/US/Arizona
Binary files differ
diff --git a/pytz/zoneinfo/US/Central b/pytz/zoneinfo/US/Central
new file mode 100644
index 0000000..3dd8f0f
--- /dev/null
+++ b/pytz/zoneinfo/US/Central
Binary files differ
diff --git a/pytz/zoneinfo/US/East-Indiana b/pytz/zoneinfo/US/East-Indiana
new file mode 100644
index 0000000..4a92c06
--- /dev/null
+++ b/pytz/zoneinfo/US/East-Indiana
Binary files differ
diff --git a/pytz/zoneinfo/US/Eastern b/pytz/zoneinfo/US/Eastern
new file mode 100644
index 0000000..7553fee
--- /dev/null
+++ b/pytz/zoneinfo/US/Eastern
Binary files differ
diff --git a/pytz/zoneinfo/US/Hawaii b/pytz/zoneinfo/US/Hawaii
new file mode 100644
index 0000000..bd85577
--- /dev/null
+++ b/pytz/zoneinfo/US/Hawaii
Binary files differ
diff --git a/pytz/zoneinfo/US/Indiana-Starke b/pytz/zoneinfo/US/Indiana-Starke
new file mode 100644
index 0000000..cc785da
--- /dev/null
+++ b/pytz/zoneinfo/US/Indiana-Starke
Binary files differ
diff --git a/pytz/zoneinfo/US/Michigan b/pytz/zoneinfo/US/Michigan
new file mode 100644
index 0000000..a123b33
--- /dev/null
+++ b/pytz/zoneinfo/US/Michigan
Binary files differ
diff --git a/pytz/zoneinfo/US/Mountain b/pytz/zoneinfo/US/Mountain
new file mode 100644
index 0000000..7fc6691
--- /dev/null
+++ b/pytz/zoneinfo/US/Mountain
Binary files differ
diff --git a/pytz/zoneinfo/US/Pacific b/pytz/zoneinfo/US/Pacific
new file mode 100644
index 0000000..1fa9149
--- /dev/null
+++ b/pytz/zoneinfo/US/Pacific
Binary files differ
diff --git a/pytz/zoneinfo/US/Pacific-New b/pytz/zoneinfo/US/Pacific-New
new file mode 100644
index 0000000..1fa9149
--- /dev/null
+++ b/pytz/zoneinfo/US/Pacific-New
Binary files differ
diff --git a/pytz/zoneinfo/US/Samoa b/pytz/zoneinfo/US/Samoa
new file mode 100644
index 0000000..1d7649f
--- /dev/null
+++ b/pytz/zoneinfo/US/Samoa
Binary files differ
diff --git a/pytz/zoneinfo/UTC b/pytz/zoneinfo/UTC
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/UTC
Binary files differ
diff --git a/pytz/zoneinfo/Universal b/pytz/zoneinfo/Universal
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/Universal
Binary files differ
diff --git a/pytz/zoneinfo/W-SU b/pytz/zoneinfo/W-SU
new file mode 100644
index 0000000..bdbbaeb
--- /dev/null
+++ b/pytz/zoneinfo/W-SU
Binary files differ
diff --git a/pytz/zoneinfo/WET b/pytz/zoneinfo/WET
new file mode 100644
index 0000000..444a193
--- /dev/null
+++ b/pytz/zoneinfo/WET
Binary files differ
diff --git a/pytz/zoneinfo/Zulu b/pytz/zoneinfo/Zulu
new file mode 100644
index 0000000..c3b97f1
--- /dev/null
+++ b/pytz/zoneinfo/Zulu
Binary files differ
diff --git a/pytz/zoneinfo/iso3166.tab b/pytz/zoneinfo/iso3166.tab
new file mode 100644
index 0000000..0b0b842
--- /dev/null
+++ b/pytz/zoneinfo/iso3166.tab
@@ -0,0 +1,275 @@
+# ISO 3166 alpha-2 country codes
+#
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+#
+# From Paul Eggert (2014-07-18):
+# This file contains a table of two-letter country codes. Columns are
+# separated by a single tab. Lines beginning with '#' are comments.
+# Although all text currently uses ASCII encoding, this is planned to
+# change to UTF-8 soon. The columns of the table are as follows:
+#
+# 1. ISO 3166-1 alpha-2 country code, current as of
+# ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166
+# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm
+# 2. The usual English name for the coded region,
+# chosen so that alphabetic sorting of subsets produces helpful lists.
+# This is not the same as the English name in the ISO 3166 tables.
+#
+# The table is sorted by country code.
+#
+# This table is intended as an aid for users, to help them select time
+# zone data appropriate for their practical needs. It is not intended
+# to take or endorse any position on legal or territorial claims.
+#
+#country-
+#code name of country, territory, area, or subdivision
+AD Andorra
+AE United Arab Emirates
+AF Afghanistan
+AG Antigua & Barbuda
+AI Anguilla
+AL Albania
+AM Armenia
+AO Angola
+AQ Antarctica
+AR Argentina
+AS Samoa (American)
+AT Austria
+AU Australia
+AW Aruba
+AX Aaland Islands
+AZ Azerbaijan
+BA Bosnia & Herzegovina
+BB Barbados
+BD Bangladesh
+BE Belgium
+BF Burkina Faso
+BG Bulgaria
+BH Bahrain
+BI Burundi
+BJ Benin
+BL St Barthelemy
+BM Bermuda
+BN Brunei
+BO Bolivia
+BQ Caribbean Netherlands
+BR Brazil
+BS Bahamas
+BT Bhutan
+BV Bouvet Island
+BW Botswana
+BY Belarus
+BZ Belize
+CA Canada
+CC Cocos (Keeling) Islands
+CD Congo (Dem. Rep.)
+CF Central African Rep.
+CG Congo (Rep.)
+CH Switzerland
+CI Cote d'Ivoire
+CK Cook Islands
+CL Chile
+CM Cameroon
+CN China
+CO Colombia
+CR Costa Rica
+CU Cuba
+CV Cape Verde
+CW Curacao
+CX Christmas Island
+CY Cyprus
+CZ Czech Republic
+DE Germany
+DJ Djibouti
+DK Denmark
+DM Dominica
+DO Dominican Republic
+DZ Algeria
+EC Ecuador
+EE Estonia
+EG Egypt
+EH Western Sahara
+ER Eritrea
+ES Spain
+ET Ethiopia
+FI Finland
+FJ Fiji
+FK Falkland Islands
+FM Micronesia
+FO Faroe Islands
+FR France
+GA Gabon
+GB Britain (UK)
+GD Grenada
+GE Georgia
+GF French Guiana
+GG Guernsey
+GH Ghana
+GI Gibraltar
+GL Greenland
+GM Gambia
+GN Guinea
+GP Guadeloupe
+GQ Equatorial Guinea
+GR Greece
+GS South Georgia & the South Sandwich Islands
+GT Guatemala
+GU Guam
+GW Guinea-Bissau
+GY Guyana
+HK Hong Kong
+HM Heard Island & McDonald Islands
+HN Honduras
+HR Croatia
+HT Haiti
+HU Hungary
+ID Indonesia
+IE Ireland
+IL Israel
+IM Isle of Man
+IN India
+IO British Indian Ocean Territory
+IQ Iraq
+IR Iran
+IS Iceland
+IT Italy
+JE Jersey
+JM Jamaica
+JO Jordan
+JP Japan
+KE Kenya
+KG Kyrgyzstan
+KH Cambodia
+KI Kiribati
+KM Comoros
+KN St Kitts & Nevis
+KP Korea (North)
+KR Korea (South)
+KW Kuwait
+KY Cayman Islands
+KZ Kazakhstan
+LA Laos
+LB Lebanon
+LC St Lucia
+LI Liechtenstein
+LK Sri Lanka
+LR Liberia
+LS Lesotho
+LT Lithuania
+LU Luxembourg
+LV Latvia
+LY Libya
+MA Morocco
+MC Monaco
+MD Moldova
+ME Montenegro
+MF St Martin (French part)
+MG Madagascar
+MH Marshall Islands
+MK Macedonia
+ML Mali
+MM Myanmar (Burma)
+MN Mongolia
+MO Macau
+MP Northern Mariana Islands
+MQ Martinique
+MR Mauritania
+MS Montserrat
+MT Malta
+MU Mauritius
+MV Maldives
+MW Malawi
+MX Mexico
+MY Malaysia
+MZ Mozambique
+NA Namibia
+NC New Caledonia
+NE Niger
+NF Norfolk Island
+NG Nigeria
+NI Nicaragua
+NL Netherlands
+NO Norway
+NP Nepal
+NR Nauru
+NU Niue
+NZ New Zealand
+OM Oman
+PA Panama
+PE Peru
+PF French Polynesia
+PG Papua New Guinea
+PH Philippines
+PK Pakistan
+PL Poland
+PM St Pierre & Miquelon
+PN Pitcairn
+PR Puerto Rico
+PS Palestine
+PT Portugal
+PW Palau
+PY Paraguay
+QA Qatar
+RE Reunion
+RO Romania
+RS Serbia
+RU Russia
+RW Rwanda
+SA Saudi Arabia
+SB Solomon Islands
+SC Seychelles
+SD Sudan
+SE Sweden
+SG Singapore
+SH St Helena
+SI Slovenia
+SJ Svalbard & Jan Mayen
+SK Slovakia
+SL Sierra Leone
+SM San Marino
+SN Senegal
+SO Somalia
+SR Suriname
+SS South Sudan
+ST Sao Tome & Principe
+SV El Salvador
+SX St Maarten (Dutch part)
+SY Syria
+SZ Swaziland
+TC Turks & Caicos Is
+TD Chad
+TF French Southern & Antarctic Lands
+TG Togo
+TH Thailand
+TJ Tajikistan
+TK Tokelau
+TL East Timor
+TM Turkmenistan
+TN Tunisia
+TO Tonga
+TR Turkey
+TT Trinidad & Tobago
+TV Tuvalu
+TW Taiwan
+TZ Tanzania
+UA Ukraine
+UG Uganda
+UM US minor outlying islands
+US United States
+UY Uruguay
+UZ Uzbekistan
+VA Vatican City
+VC St Vincent
+VE Venezuela
+VG Virgin Islands (UK)
+VI Virgin Islands (US)
+VN Vietnam
+VU Vanuatu
+WF Wallis & Futuna
+WS Samoa (western)
+YE Yemen
+YT Mayotte
+ZA South Africa
+ZM Zambia
+ZW Zimbabwe
diff --git a/pytz/zoneinfo/localtime b/pytz/zoneinfo/localtime
new file mode 100644
index 0000000..c05e45f
--- /dev/null
+++ b/pytz/zoneinfo/localtime
Binary files differ
diff --git a/pytz/zoneinfo/posixrules b/pytz/zoneinfo/posixrules
new file mode 100644
index 0000000..7553fee
--- /dev/null
+++ b/pytz/zoneinfo/posixrules
Binary files differ
diff --git a/pytz/zoneinfo/zone.tab b/pytz/zoneinfo/zone.tab
new file mode 100644
index 0000000..a7373f1
--- /dev/null
+++ b/pytz/zoneinfo/zone.tab
@@ -0,0 +1,440 @@
+# tz zone descriptions (deprecated version)
+#
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+#
+# From Paul Eggert (2014-07-31):
+# This file is intended as a backward-compatibility aid for older programs.
+# New programs should use zone1970.tab. This file is like zone1970.tab (see
+# zone1970.tab's comments), but with the following additional restrictions:
+#
+# 1. This file contains only ASCII characters.
+# 2. The first data column contains exactly one country code.
+#
+# Because of (2), each row stands for an area that is the intersection
+# of a region identified by a country code and of a zone where civil
+# clocks have agreed since 1970; this is a narrower definition than
+# that of zone1970.tab.
+#
+# This table is intended as an aid for users, to help them select time
+# zone data entries appropriate for their practical needs. It is not
+# intended to take or endorse any position on legal or territorial claims.
+#
+#country-
+#code coordinates TZ comments
+AD +4230+00131 Europe/Andorra
+AE +2518+05518 Asia/Dubai
+AF +3431+06912 Asia/Kabul
+AG +1703-06148 America/Antigua
+AI +1812-06304 America/Anguilla
+AL +4120+01950 Europe/Tirane
+AM +4011+04430 Asia/Yerevan
+AO -0848+01314 Africa/Luanda
+AQ -7750+16636 Antarctica/McMurdo McMurdo, South Pole, Scott (New Zealand time)
+AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
+AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
+AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adelie Land
+AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
+AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
+AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
+AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
+AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
+AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
+AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
+AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
+AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
+AR -3319-06621 America/Argentina/San_Luis San Luis (SL)
+AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
+AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
+AS -1416-17042 Pacific/Pago_Pago
+AT +4813+01620 Europe/Vienna
+AU -3133+15905 Australia/Lord_Howe Lord Howe Island
+AU -5430+15857 Antarctica/Macquarie Macquarie Island
+AU -4253+14719 Australia/Hobart Tasmania - most locations
+AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -3749+14458 Australia/Melbourne Victoria
+AU -3352+15113 Australia/Sydney New South Wales - most locations
+AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
+AU -2728+15302 Australia/Brisbane Queensland - most locations
+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3455+13835 Australia/Adelaide South Australia
+AU -1228+13050 Australia/Darwin Northern Territory
+AU -3157+11551 Australia/Perth Western Australia - most locations
+AU -3143+12852 Australia/Eucla Western Australia - Eucla area
+AW +1230-06958 America/Aruba
+AX +6006+01957 Europe/Mariehamn
+AZ +4023+04951 Asia/Baku
+BA +4352+01825 Europe/Sarajevo
+BB +1306-05937 America/Barbados
+BD +2343+09025 Asia/Dhaka
+BE +5050+00420 Europe/Brussels
+BF +1222-00131 Africa/Ouagadougou
+BG +4241+02319 Europe/Sofia
+BH +2623+05035 Asia/Bahrain
+BI -0323+02922 Africa/Bujumbura
+BJ +0629+00237 Africa/Porto-Novo
+BL +1753-06251 America/St_Barthelemy
+BM +3217-06446 Atlantic/Bermuda
+BN +0456+11455 Asia/Brunei
+BO -1630-06809 America/La_Paz
+BQ +120903-0681636 America/Kralendijk
+BR -0351-03225 America/Noronha Atlantic islands
+BR -0127-04829 America/Belem Amapa, E Para
+BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
+BR -0803-03454 America/Recife Pernambuco
+BR -0712-04812 America/Araguaina Tocantins
+BR -0940-03543 America/Maceio Alagoas, Sergipe
+BR -1259-03831 America/Bahia Bahia
+BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
+BR -1535-05605 America/Cuiaba Mato Grosso
+BR -0226-05452 America/Santarem W Para
+BR -0846-06354 America/Porto_Velho Rondonia
+BR +0249-06040 America/Boa_Vista Roraima
+BR -0308-06001 America/Manaus E Amazonas
+BR -0640-06952 America/Eirunepe W Amazonas
+BR -0958-06748 America/Rio_Branco Acre
+BS +2505-07721 America/Nassau
+BT +2728+08939 Asia/Thimphu
+BW -2439+02555 Africa/Gaborone
+BY +5354+02734 Europe/Minsk
+BZ +1730-08812 America/Belize
+CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI
+CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
+CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
+CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
+CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
+CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations
+CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
+CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
+CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
+CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
+CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
+CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
+CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
+CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
+CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
+CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
+CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
+CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
+CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
+CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
+CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
+CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
+CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
+CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CC -1210+09655 Indian/Cocos
+CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo
+CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
+CF +0422+01835 Africa/Bangui
+CG -0416+01517 Africa/Brazzaville
+CH +4723+00832 Europe/Zurich
+CI +0519-00402 Africa/Abidjan
+CK -2114-15946 Pacific/Rarotonga
+CL -3327-07040 America/Santiago most locations
+CL -2709-10926 Pacific/Easter Easter Island
+CM +0403+00942 Africa/Douala
+CN +3114+12128 Asia/Shanghai Beijing Time
+CN +4348+08735 Asia/Urumqi Xinjiang Time
+CO +0436-07405 America/Bogota
+CR +0956-08405 America/Costa_Rica
+CU +2308-08222 America/Havana
+CV +1455-02331 Atlantic/Cape_Verde
+CW +1211-06900 America/Curacao
+CX -1025+10543 Indian/Christmas
+CY +3510+03322 Asia/Nicosia
+CZ +5005+01426 Europe/Prague
+DE +5230+01322 Europe/Berlin most locations
+DE +4742+00841 Europe/Busingen Busingen
+DJ +1136+04309 Africa/Djibouti
+DK +5540+01235 Europe/Copenhagen
+DM +1518-06124 America/Dominica
+DO +1828-06954 America/Santo_Domingo
+DZ +3647+00303 Africa/Algiers
+EC -0210-07950 America/Guayaquil mainland
+EC -0054-08936 Pacific/Galapagos Galapagos Islands
+EE +5925+02445 Europe/Tallinn
+EG +3003+03115 Africa/Cairo
+EH +2709-01312 Africa/El_Aaiun
+ER +1520+03853 Africa/Asmara
+ES +4024-00341 Europe/Madrid mainland
+ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +2806-01524 Atlantic/Canary Canary Islands
+ET +0902+03842 Africa/Addis_Ababa
+FI +6010+02458 Europe/Helsinki
+FJ -1808+17825 Pacific/Fiji
+FK -5142-05751 Atlantic/Stanley
+FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
+FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
+FM +0519+16259 Pacific/Kosrae Kosrae
+FO +6201-00646 Atlantic/Faroe
+FR +4852+00220 Europe/Paris
+GA +0023+00927 Africa/Libreville
+GB +513030-0000731 Europe/London
+GD +1203-06145 America/Grenada
+GE +4143+04449 Asia/Tbilisi
+GF +0456-05220 America/Cayenne
+GG +4927-00232 Europe/Guernsey
+GH +0533-00013 Africa/Accra
+GI +3608-00521 Europe/Gibraltar
+GL +6411-05144 America/Godthab most locations
+GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
+GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
+GL +7634-06847 America/Thule Thule / Pituffik
+GM +1328-01639 Africa/Banjul
+GN +0931-01343 Africa/Conakry
+GP +1614-06132 America/Guadeloupe
+GQ +0345+00847 Africa/Malabo
+GR +3758+02343 Europe/Athens
+GS -5416-03632 Atlantic/South_Georgia
+GT +1438-09031 America/Guatemala
+GU +1328+14445 Pacific/Guam
+GW +1151-01535 Africa/Bissau
+GY +0648-05810 America/Guyana
+HK +2217+11409 Asia/Hong_Kong
+HN +1406-08713 America/Tegucigalpa
+HR +4548+01558 Europe/Zagreb
+HT +1832-07220 America/Port-au-Prince
+HU +4730+01905 Europe/Budapest
+ID -0610+10648 Asia/Jakarta Java & Sumatra
+ID -0002+10920 Asia/Pontianak west & central Borneo
+ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
+ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)
+IE +5320-00615 Europe/Dublin
+IL +314650+0351326 Asia/Jerusalem
+IM +5409-00428 Europe/Isle_of_Man
+IN +2232+08822 Asia/Kolkata
+IO -0720+07225 Indian/Chagos
+IQ +3321+04425 Asia/Baghdad
+IR +3540+05126 Asia/Tehran
+IS +6409-02151 Atlantic/Reykjavik
+IT +4154+01229 Europe/Rome
+JE +4912-00207 Europe/Jersey
+JM +175805-0764736 America/Jamaica
+JO +3157+03556 Asia/Amman
+JP +353916+1394441 Asia/Tokyo
+KE -0117+03649 Africa/Nairobi
+KG +4254+07436 Asia/Bishkek
+KH +1133+10455 Asia/Phnom_Penh
+KI +0125+17300 Pacific/Tarawa Gilbert Islands
+KI -0308-17105 Pacific/Enderbury Phoenix Islands
+KI +0152-15720 Pacific/Kiritimati Line Islands
+KM -1141+04316 Indian/Comoro
+KN +1718-06243 America/St_Kitts
+KP +3901+12545 Asia/Pyongyang
+KR +3733+12658 Asia/Seoul
+KW +2920+04759 Asia/Kuwait
+KY +1918-08123 America/Cayman
+KZ +4315+07657 Asia/Almaty most locations
+KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
+KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
+KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
+KZ +5113+05121 Asia/Oral West Kazakhstan
+LA +1758+10236 Asia/Vientiane
+LB +3353+03530 Asia/Beirut
+LC +1401-06100 America/St_Lucia
+LI +4709+00931 Europe/Vaduz
+LK +0656+07951 Asia/Colombo
+LR +0618-01047 Africa/Monrovia
+LS -2928+02730 Africa/Maseru
+LT +5441+02519 Europe/Vilnius
+LU +4936+00609 Europe/Luxembourg
+LV +5657+02406 Europe/Riga
+LY +3254+01311 Africa/Tripoli
+MA +3339-00735 Africa/Casablanca
+MC +4342+00723 Europe/Monaco
+MD +4700+02850 Europe/Chisinau
+ME +4226+01916 Europe/Podgorica
+MF +1804-06305 America/Marigot
+MG -1855+04731 Indian/Antananarivo
+MH +0709+17112 Pacific/Majuro most locations
+MH +0905+16720 Pacific/Kwajalein Kwajalein
+MK +4159+02126 Europe/Skopje
+ML +1239-00800 Africa/Bamako
+MM +1647+09610 Asia/Rangoon
+MN +4755+10653 Asia/Ulaanbaatar most locations
+MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
+MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
+MO +2214+11335 Asia/Macau
+MP +1512+14545 Pacific/Saipan
+MQ +1436-06105 America/Martinique
+MR +1806-01557 Africa/Nouakchott
+MS +1643-06213 America/Montserrat
+MT +3554+01431 Europe/Malta
+MU -2010+05730 Indian/Mauritius
+MV +0410+07330 Indian/Maldives
+MW -1547+03500 Africa/Blantyre
+MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +2105-08646 America/Cancun Central Time - Quintana Roo
+MX +2058-08937 America/Merida Central Time - Campeche, Yucatan
+MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border
+MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border
+MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border
+MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
+MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
+MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
+MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
+MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas
+MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
+MY +0133+11020 Asia/Kuching Sabah & Sarawak
+MZ -2558+03235 Africa/Maputo
+NA -2234+01706 Africa/Windhoek
+NC -2216+16627 Pacific/Noumea
+NE +1331+00207 Africa/Niamey
+NF -2903+16758 Pacific/Norfolk
+NG +0627+00324 Africa/Lagos
+NI +1209-08617 America/Managua
+NL +5222+00454 Europe/Amsterdam
+NO +5955+01045 Europe/Oslo
+NP +2743+08519 Asia/Kathmandu
+NR -0031+16655 Pacific/Nauru
+NU -1901-16955 Pacific/Niue
+NZ -3652+17446 Pacific/Auckland most locations
+NZ -4357-17633 Pacific/Chatham Chatham Islands
+OM +2336+05835 Asia/Muscat
+PA +0858-07932 America/Panama
+PE -1203-07703 America/Lima
+PF -1732-14934 Pacific/Tahiti Society Islands
+PF -0900-13930 Pacific/Marquesas Marquesas Islands
+PF -2308-13457 Pacific/Gambier Gambier Islands
+PG -0930+14710 Pacific/Port_Moresby most locations
+PG -0613+15534 Pacific/Bougainville Bougainville
+PH +1435+12100 Asia/Manila
+PK +2452+06703 Asia/Karachi
+PL +5215+02100 Europe/Warsaw
+PM +4703-05620 America/Miquelon
+PN -2504-13005 Pacific/Pitcairn
+PR +182806-0660622 America/Puerto_Rico
+PS +3130+03428 Asia/Gaza Gaza Strip
+PS +313200+0350542 Asia/Hebron West Bank
+PT +3843-00908 Europe/Lisbon mainland
+PT +3238-01654 Atlantic/Madeira Madeira Islands
+PT +3744-02540 Atlantic/Azores Azores
+PW +0720+13429 Pacific/Palau
+PY -2516-05740 America/Asuncion
+QA +2517+05132 Asia/Qatar
+RE -2052+05528 Indian/Reunion
+RO +4426+02606 Europe/Bucharest
+RS +4450+02030 Europe/Belgrade
+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
+RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
+RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
+RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
+RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
+RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
+RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
+RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
+RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
+RW -0157+03004 Africa/Kigali
+SA +2438+04643 Asia/Riyadh
+SB -0932+16012 Pacific/Guadalcanal
+SC -0440+05528 Indian/Mahe
+SD +1536+03232 Africa/Khartoum
+SE +5920+01803 Europe/Stockholm
+SG +0117+10351 Asia/Singapore
+SH -1555-00542 Atlantic/St_Helena
+SI +4603+01431 Europe/Ljubljana
+SJ +7800+01600 Arctic/Longyearbyen
+SK +4809+01707 Europe/Bratislava
+SL +0830-01315 Africa/Freetown
+SM +4355+01228 Europe/San_Marino
+SN +1440-01726 Africa/Dakar
+SO +0204+04522 Africa/Mogadishu
+SR +0550-05510 America/Paramaribo
+SS +0451+03136 Africa/Juba
+ST +0020+00644 Africa/Sao_Tome
+SV +1342-08912 America/El_Salvador
+SX +180305-0630250 America/Lower_Princes
+SY +3330+03618 Asia/Damascus
+SZ -2618+03106 Africa/Mbabane
+TC +2128-07108 America/Grand_Turk
+TD +1207+01503 Africa/Ndjamena
+TF -492110+0701303 Indian/Kerguelen
+TG +0608+00113 Africa/Lome
+TH +1345+10031 Asia/Bangkok
+TJ +3835+06848 Asia/Dushanbe
+TK -0922-17114 Pacific/Fakaofo
+TL -0833+12535 Asia/Dili
+TM +3757+05823 Asia/Ashgabat
+TN +3648+01011 Africa/Tunis
+TO -2110-17510 Pacific/Tongatapu
+TR +4101+02858 Europe/Istanbul
+TT +1039-06131 America/Port_of_Spain
+TV -0831+17913 Pacific/Funafuti
+TW +2503+12130 Asia/Taipei
+TZ -0648+03917 Africa/Dar_es_Salaam
+UA +5026+03031 Europe/Kiev most locations
+UA +4837+02218 Europe/Uzhgorod Ruthenia
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
+UG +0019+03225 Africa/Kampala
+UM +1645-16931 Pacific/Johnston Johnston Atoll
+UM +2813-17722 Pacific/Midway Midway Islands
+UM +1917+16637 Pacific/Wake Wake Island
+US +404251-0740023 America/New_York Eastern Time
+US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
+US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
+US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
+US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
+US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
+US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
+US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
+US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County
+US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
+US +415100-0873900 America/Chicago Central Time
+US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County
+US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County
+US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
+US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
+US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
+US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County
+US +394421-1045903 America/Denver Mountain Time
+US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
+US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
+US +340308-1181434 America/Los_Angeles Pacific Time
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
+US +611305-1495401 America/Anchorage Alaska Time
+US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
+US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
+US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
+US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +515248-1763929 America/Adak Aleutian Islands
+US +211825-1575130 Pacific/Honolulu Hawaii
+UY -3453-05611 America/Montevideo
+UZ +3940+06648 Asia/Samarkand west Uzbekistan
+UZ +4120+06918 Asia/Tashkent east Uzbekistan
+VA +415408+0122711 Europe/Vatican
+VC +1309-06114 America/St_Vincent
+VE +1030-06656 America/Caracas
+VG +1827-06437 America/Tortola
+VI +1821-06456 America/St_Thomas
+VN +1045+10640 Asia/Ho_Chi_Minh
+VU -1740+16825 Pacific/Efate
+WF -1318-17610 Pacific/Wallis
+WS -1350-17144 Pacific/Apia
+YE +1245+04512 Asia/Aden
+YT -1247+04514 Indian/Mayotte
+ZA -2615+02800 Africa/Johannesburg
+ZM -1525+02817 Africa/Lusaka
+ZW -1750+03103 Africa/Harare
diff --git a/pytz/zoneinfo/zone1970.tab b/pytz/zoneinfo/zone1970.tab
new file mode 100644
index 0000000..e971bc7
--- /dev/null
+++ b/pytz/zoneinfo/zone1970.tab
@@ -0,0 +1,371 @@
+# tz zone descriptions
+#
+# This file is in the public domain.
+#
+# From Paul Eggert (2014-07-31):
+# This file contains a table where each row stands for a zone where
+# civil time stamps have agreed since 1970. Columns are separated by
+# a single tab. Lines beginning with '#' are comments. All text uses
+# UTF-8 encoding. The columns of the table are as follows:
+#
+# 1. The countries that overlap the zone, as a comma-separated list
+# of ISO 3166 2-character country codes. See the file 'iso3166.tab'.
+# 2. Latitude and longitude of the zone's principal location
+# in ISO 6709 sign-degrees-minutes-seconds format,
+# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
+# first latitude (+ is north), then longitude (+ is east).
+# 3. Zone name used in value of TZ environment variable.
+# Please see the 'Theory' file for how zone names are chosen.
+# If multiple zones overlap a country, each has a row in the
+# table, with each column 1 containing the country code.
+# 4. Comments; present if and only if a country has multiple zones.
+#
+# If a zone covers multiple countries, the most-populous city is used,
+# and that country is listed first in column 1; any other countries
+# are listed alphabetically by country code. The table is sorted
+# first by country code, then (if possible) by an order within the
+# country that (1) makes some geographical sense, and (2) puts the
+# most populous zones first, where that does not contradict (1).
+#
+# This table is intended as an aid for users, to help them select time
+# zone data entries appropriate for their practical needs. It is not
+# intended to take or endorse any position on legal or territorial claims.
+#
+#country-
+#codes coordinates TZ comments
+AD +4230+00131 Europe/Andorra
+AE,OM +2518+05518 Asia/Dubai
+AF +3431+06912 Asia/Kabul
+AL +4120+01950 Europe/Tirane
+AM +4011+04430 Asia/Yerevan
+AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
+AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
+AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adélie Land
+AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
+AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
+AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
+AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
+AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
+AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
+AR -2649-06513 America/Argentina/Tucuman Tucumán (TM)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
+AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
+AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
+AR -3319-06621 America/Argentina/San_Luis San Luis (SL)
+AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
+AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
+AS,UM -1416-17042 Pacific/Pago_Pago Samoa, Midway
+AT +4813+01620 Europe/Vienna
+AU -3133+15905 Australia/Lord_Howe Lord Howe Island
+AU -5430+15857 Antarctica/Macquarie Macquarie Island
+AU -4253+14719 Australia/Hobart Tasmania - most locations
+AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -3749+14458 Australia/Melbourne Victoria
+AU -3352+15113 Australia/Sydney New South Wales - most locations
+AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
+AU -2728+15302 Australia/Brisbane Queensland - most locations
+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3455+13835 Australia/Adelaide South Australia
+AU -1228+13050 Australia/Darwin Northern Territory
+AU -3157+11551 Australia/Perth Western Australia - most locations
+AU -3143+12852 Australia/Eucla Western Australia - Eucla area
+AZ +4023+04951 Asia/Baku
+BB +1306-05937 America/Barbados
+BD +2343+09025 Asia/Dhaka
+BE +5050+00420 Europe/Brussels
+BG +4241+02319 Europe/Sofia
+BM +3217-06446 Atlantic/Bermuda
+BN +0456+11455 Asia/Brunei
+BO -1630-06809 America/La_Paz
+BR -0351-03225 America/Noronha Atlantic islands
+BR -0127-04829 America/Belem Amapá, E Pará
+BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
+BR -0803-03454 America/Recife Pernambuco
+BR -0712-04812 America/Araguaina Tocantins
+BR -0940-03543 America/Maceio Alagoas, Sergipe
+BR -1259-03831 America/Bahia Bahia
+BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
+BR -1535-05605 America/Cuiaba Mato Grosso
+BR -0226-05452 America/Santarem W Pará
+BR -0846-06354 America/Porto_Velho Rondônia
+BR +0249-06040 America/Boa_Vista Roraima
+BR -0308-06001 America/Manaus E Amazonas
+BR -0640-06952 America/Eirunepe W Amazonas
+BR -0958-06748 America/Rio_Branco Acre
+BS +2505-07721 America/Nassau
+BT +2728+08939 Asia/Thimphu
+BY +5354+02734 Europe/Minsk
+BZ +1730-08812 America/Belize
+CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI
+CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
+CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
+CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
+CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
+CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations
+CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
+CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
+CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
+CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
+CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
+CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
+CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
+CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
+CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
+CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
+CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
+CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
+CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
+CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
+CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
+CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
+CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
+CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
+CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CC -1210+09655 Indian/Cocos
+CH,DE,LI +4723+00832 Europe/Zurich Swiss time
+CI,BF,GM,GN,ML,MR,SH,SL,SN,ST,TG +0519-00402 Africa/Abidjan
+CK -2114-15946 Pacific/Rarotonga
+CL -3327-07040 America/Santiago most locations
+CL -2709-10926 Pacific/Easter Easter Island
+CN +3114+12128 Asia/Shanghai Beijing Time
+CN +4348+08735 Asia/Urumqi Xinjiang Time
+CO +0436-07405 America/Bogota
+CR +0956-08405 America/Costa_Rica
+CU +2308-08222 America/Havana
+CV +1455-02331 Atlantic/Cape_Verde
+CW,AW,BQ,SX +1211-06900 America/Curacao
+CX -1025+10543 Indian/Christmas
+CY +3510+03322 Asia/Nicosia
+CZ,SK +5005+01426 Europe/Prague
+DE +5230+01322 Europe/Berlin Berlin time
+DK +5540+01235 Europe/Copenhagen
+DO +1828-06954 America/Santo_Domingo
+DZ +3647+00303 Africa/Algiers
+EC -0210-07950 America/Guayaquil mainland
+EC -0054-08936 Pacific/Galapagos Galápagos Islands
+EE +5925+02445 Europe/Tallinn
+EG +3003+03115 Africa/Cairo
+EH +2709-01312 Africa/El_Aaiun
+ES +4024-00341 Europe/Madrid mainland
+ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +2806-01524 Atlantic/Canary Canary Islands
+FI,AX +6010+02458 Europe/Helsinki
+FJ -1808+17825 Pacific/Fiji
+FK -5142-05751 Atlantic/Stanley
+FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
+FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
+FM +0519+16259 Pacific/Kosrae Kosrae
+FO +6201-00646 Atlantic/Faroe
+FR +4852+00220 Europe/Paris
+GB,GG,IM,JE +513030-0000731 Europe/London
+GE +4143+04449 Asia/Tbilisi
+GF +0456-05220 America/Cayenne
+GH +0533-00013 Africa/Accra
+GI +3608-00521 Europe/Gibraltar
+GL +6411-05144 America/Godthab most locations
+GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
+GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
+GL +7634-06847 America/Thule Thule / Pituffik
+GR +3758+02343 Europe/Athens
+GS -5416-03632 Atlantic/South_Georgia
+GT +1438-09031 America/Guatemala
+GU,MP +1328+14445 Pacific/Guam
+GW +1151-01535 Africa/Bissau
+GY +0648-05810 America/Guyana
+HK +2217+11409 Asia/Hong_Kong
+HN +1406-08713 America/Tegucigalpa
+HT +1832-07220 America/Port-au-Prince
+HU +4730+01905 Europe/Budapest
+ID -0610+10648 Asia/Jakarta Java & Sumatra
+ID -0002+10920 Asia/Pontianak west & central Borneo
+ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
+ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)
+IE +5320-00615 Europe/Dublin
+IL +314650+0351326 Asia/Jerusalem
+IN +2232+08822 Asia/Kolkata
+IO -0720+07225 Indian/Chagos
+IQ +3321+04425 Asia/Baghdad
+IR +3540+05126 Asia/Tehran
+IS +6409-02151 Atlantic/Reykjavik
+IT,SM,VA +4154+01229 Europe/Rome
+JM +175805-0764736 America/Jamaica
+JO +3157+03556 Asia/Amman
+JP +353916+1394441 Asia/Tokyo
+KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi
+KG +4254+07436 Asia/Bishkek
+KI +0125+17300 Pacific/Tarawa Gilbert Islands
+KI -0308-17105 Pacific/Enderbury Phoenix Islands
+KI +0152-15720 Pacific/Kiritimati Line Islands
+KP +3901+12545 Asia/Pyongyang
+KR +3733+12658 Asia/Seoul
+KZ +4315+07657 Asia/Almaty most locations
+KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
+KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
+KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
+KZ +5113+05121 Asia/Oral West Kazakhstan
+LB +3353+03530 Asia/Beirut
+LK +0656+07951 Asia/Colombo
+LR +0618-01047 Africa/Monrovia
+LT +5441+02519 Europe/Vilnius
+LU +4936+00609 Europe/Luxembourg
+LV +5657+02406 Europe/Riga
+LY +3254+01311 Africa/Tripoli
+MA +3339-00735 Africa/Casablanca
+MC +4342+00723 Europe/Monaco
+MD +4700+02850 Europe/Chisinau
+MH +0709+17112 Pacific/Majuro most locations
+MH +0905+16720 Pacific/Kwajalein Kwajalein
+MM +1647+09610 Asia/Rangoon
+MN +4755+10653 Asia/Ulaanbaatar most locations
+MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
+MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
+MO +2214+11335 Asia/Macau
+MQ +1436-06105 America/Martinique
+MT +3554+01431 Europe/Malta
+MU -2010+05730 Indian/Mauritius
+MV +0410+07330 Indian/Maldives
+MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +2105-08646 America/Cancun Central Time - Quintana Roo
+MX +2058-08937 America/Merida Central Time - Campeche, Yucatán
+MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo León, Tamaulipas away from US border
+MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo León, Tamaulipas near US border
+MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border
+MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
+MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
+MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
+MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
+MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahía de Banderas
+MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
+MY +0133+11020 Asia/Kuching Sabah & Sarawak
+MZ,BI,BW,CD,MW,RW,ZM,ZW -2558+03235 Africa/Maputo Central Africa Time (UTC+2)
+NA -2234+01706 Africa/Windhoek
+NC -2216+16627 Pacific/Noumea
+NF -2903+16758 Pacific/Norfolk
+NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE +0627+00324 Africa/Lagos West Africa Time (UTC+1)
+NI +1209-08617 America/Managua
+NL +5222+00454 Europe/Amsterdam
+NO,SJ +5955+01045 Europe/Oslo
+NP +2743+08519 Asia/Kathmandu
+NR -0031+16655 Pacific/Nauru
+NU -1901-16955 Pacific/Niue
+NZ,AQ -3652+17446 Pacific/Auckland New Zealand time
+NZ -4357-17633 Pacific/Chatham Chatham Islands
+PA,KY +0858-07932 America/Panama
+PE -1203-07703 America/Lima
+PF -1732-14934 Pacific/Tahiti Society Islands
+PF -0900-13930 Pacific/Marquesas Marquesas Islands
+PF -2308-13457 Pacific/Gambier Gambier Islands
+PG -0930+14710 Pacific/Port_Moresby most locations
+PG -0613+15534 Pacific/Bougainville Bougainville
+PH +1435+12100 Asia/Manila
+PK +2452+06703 Asia/Karachi
+PL +5215+02100 Europe/Warsaw
+PM +4703-05620 America/Miquelon
+PN -2504-13005 Pacific/Pitcairn
+PR +182806-0660622 America/Puerto_Rico
+PS +3130+03428 Asia/Gaza Gaza Strip
+PS +313200+0350542 Asia/Hebron West Bank
+PT +3843-00908 Europe/Lisbon mainland
+PT +3238-01654 Atlantic/Madeira Madeira Islands
+PT +3744-02540 Atlantic/Azores Azores
+PW +0720+13429 Pacific/Palau
+PY -2516-05740 America/Asuncion
+QA,BH +2517+05132 Asia/Qatar
+RE,TF -2052+05528 Indian/Reunion Réunion, Crozet Is, Scattered Is
+RO +4426+02606 Europe/Bucharest
+RS,BA,HR,ME,MK,SI +4450+02030 Europe/Belgrade
+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
+RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
+RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
+RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
+RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
+RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
+RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
+RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
+RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
+RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
+RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
+RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
+RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
+RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
+SA,KW,YE +2438+04643 Asia/Riyadh
+SB -0932+16012 Pacific/Guadalcanal
+SC -0440+05528 Indian/Mahe
+SD,SS +1536+03232 Africa/Khartoum
+SE +5920+01803 Europe/Stockholm
+SG +0117+10351 Asia/Singapore
+SR +0550-05510 America/Paramaribo
+SV +1342-08912 America/El_Salvador
+SY +3330+03618 Asia/Damascus
+TC +2128-07108 America/Grand_Turk
+TD +1207+01503 Africa/Ndjamena
+TF -492110+0701303 Indian/Kerguelen Kerguelen, St Paul I, Amsterdam I
+TH,KH,LA,VN +1345+10031 Asia/Bangkok most of Indochina
+TJ +3835+06848 Asia/Dushanbe
+TK -0922-17114 Pacific/Fakaofo
+TL -0833+12535 Asia/Dili
+TM +3757+05823 Asia/Ashgabat
+TN +3648+01011 Africa/Tunis
+TO -2110-17510 Pacific/Tongatapu
+TR +4101+02858 Europe/Istanbul
+TT,AG,AI,BL,DM,GD,GP,KN,LC,MF,MS,VC,VG,VI +1039-06131 America/Port_of_Spain
+TV -0831+17913 Pacific/Funafuti
+TW +2503+12130 Asia/Taipei
+UA +5026+03031 Europe/Kiev most locations
+UA +4837+02218 Europe/Uzhgorod Ruthenia
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
+UM +1917+16637 Pacific/Wake Wake Island
+US +404251-0740023 America/New_York Eastern Time
+US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
+US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
+US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
+US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
+US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
+US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
+US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
+US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County
+US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
+US +415100-0873900 America/Chicago Central Time
+US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County
+US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County
+US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
+US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
+US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
+US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County
+US +394421-1045903 America/Denver Mountain Time
+US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
+US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
+US +340308-1181434 America/Los_Angeles Pacific Time
+US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
+US +611305-1495401 America/Anchorage Alaska Time
+US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
+US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
+US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
+US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +515248-1763929 America/Adak Aleutian Islands
+US,UM +211825-1575130 Pacific/Honolulu Hawaii time
+UY -3453-05611 America/Montevideo
+UZ +3940+06648 Asia/Samarkand west Uzbekistan
+UZ +4120+06918 Asia/Tashkent east Uzbekistan
+VE +1030-06656 America/Caracas
+VN +1045+10640 Asia/Ho_Chi_Minh south Vietnam
+VU -1740+16825 Pacific/Efate
+WF -1318-17610 Pacific/Wallis
+WS -1350-17144 Pacific/Apia
+ZA,LS,SZ -2615+02800 Africa/Johannesburg
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build =
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..9c94d6a
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,52 @@
+'''
+pytz setup script
+'''
+
+import pytz, sys, os, os.path
+
+try:
+ from setuptools import setup
+except ImportError:
+ from distutils.core import setup
+
+me = 'Stuart Bishop'
+memail = 'stuart@stuartbishop.net'
+packages = ['pytz']
+resources = ['zone.tab', 'locales/pytz.pot']
+for dirpath, dirnames, filenames in os.walk(os.path.join('pytz', 'zoneinfo')):
+ # remove the 'pytz' part of the path
+ basepath = dirpath.split(os.path.sep, 1)[1]
+ resources.extend([os.path.join(basepath, filename)
+ for filename in filenames])
+package_data = {'pytz': resources}
+
+assert len(resources) > 10, 'zoneinfo files not found!'
+
+setup (
+ name='pytz',
+ version=pytz.VERSION,
+ zip_safe=True,
+ description='World timezone definitions, modern and historical',
+ long_description=open('README.txt','r').read(),
+ author=me,
+ author_email=memail,
+ maintainer=me,
+ maintainer_email=memail,
+ url='http://pythonhosted.org/pytz',
+ license='MIT',
+ keywords=['timezone','tzinfo', 'datetime', 'olson', 'time'],
+ packages=packages,
+ package_data=package_data,
+ download_url='http://pypi.python.org/pypi/pytz',
+ platforms=['Independant'],
+ classifiers = [
+ 'Development Status :: 6 - Mature',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: MIT License',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 3',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ ],
+ )