From 28a0d0bf56d35eeb1bb22a41755e029c7714f016 Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Fri, 20 Feb 2015 16:27:28 +0000 Subject: Unpack pytz-2014.10 tarball for testing --- CHANGES.txt | 54 + LICENSE.txt | 19 + MANIFEST.in | 5 + PKG-INFO | 595 ++++++++++ README.txt | 575 +++++++++ pytz.egg-info/PKG-INFO | 595 ++++++++++ pytz.egg-info/SOURCES.txt | 607 ++++++++++ pytz.egg-info/dependency_links.txt | 1 + pytz.egg-info/top_level.txt | 1 + pytz.egg-info/zip-safe | 1 + pytz/__init__.py | 1513 ++++++++++++++++++++++++ pytz/exceptions.py | 48 + pytz/lazy.py | 168 +++ pytz/reference.py | 127 ++ pytz/tests/test_docs.py | 34 + pytz/tests/test_lazy.py | 313 +++++ pytz/tests/test_tzinfo.py | 837 +++++++++++++ pytz/tzfile.py | 137 +++ pytz/tzinfo.py | 564 +++++++++ pytz/zoneinfo/Africa/Abidjan | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Accra | Bin 0 -> 840 bytes pytz/zoneinfo/Africa/Addis_Ababa | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Algiers | Bin 0 -> 760 bytes pytz/zoneinfo/Africa/Asmara | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Asmera | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Bamako | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Bangui | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Banjul | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Bissau | Bin 0 -> 208 bytes pytz/zoneinfo/Africa/Blantyre | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Brazzaville | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Bujumbura | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Cairo | Bin 0 -> 2779 bytes pytz/zoneinfo/Africa/Casablanca | Bin 0 -> 1657 bytes pytz/zoneinfo/Africa/Ceuta | Bin 0 -> 2075 bytes pytz/zoneinfo/Africa/Conakry | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Dakar | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Dar_es_Salaam | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Djibouti | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Douala | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/El_Aaiun | Bin 0 -> 1487 bytes pytz/zoneinfo/Africa/Freetown | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Gaborone | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Harare | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Johannesburg | Bin 0 -> 271 bytes pytz/zoneinfo/Africa/Juba | Bin 0 -> 683 bytes pytz/zoneinfo/Africa/Kampala | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Khartoum | Bin 0 -> 683 bytes pytz/zoneinfo/Africa/Kigali | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Kinshasa | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Lagos | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Libreville | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Lome | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Luanda | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Lubumbashi | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Lusaka | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Malabo | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Maputo | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Maseru | Bin 0 -> 271 bytes pytz/zoneinfo/Africa/Mbabane | Bin 0 -> 271 bytes pytz/zoneinfo/Africa/Mogadishu | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Monrovia | Bin 0 -> 241 bytes pytz/zoneinfo/Africa/Nairobi | Bin 0 -> 283 bytes pytz/zoneinfo/Africa/Ndjamena | Bin 0 -> 225 bytes pytz/zoneinfo/Africa/Niamey | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Nouakchott | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Ouagadougou | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Porto-Novo | Bin 0 -> 171 bytes pytz/zoneinfo/Africa/Sao_Tome | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Timbuktu | Bin 0 -> 170 bytes pytz/zoneinfo/Africa/Tripoli | Bin 0 -> 655 bytes pytz/zoneinfo/Africa/Tunis | Bin 0 -> 710 bytes pytz/zoneinfo/Africa/Windhoek | Bin 0 -> 1582 bytes pytz/zoneinfo/America/Adak | Bin 0 -> 2379 bytes pytz/zoneinfo/America/Anchorage | Bin 0 -> 2384 bytes pytz/zoneinfo/America/Anguilla | Bin 0 -> 170 bytes pytz/zoneinfo/America/Antigua | Bin 0 -> 208 bytes pytz/zoneinfo/America/Araguaina | Bin 0 -> 896 bytes pytz/zoneinfo/America/Argentina/Buenos_Aires | Bin 0 -> 1087 bytes pytz/zoneinfo/America/Argentina/Catamarca | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Argentina/ComodRivadavia | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Argentina/Cordoba | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Argentina/Jujuy | Bin 0 -> 1145 bytes pytz/zoneinfo/America/Argentina/La_Rioja | Bin 0 -> 1143 bytes pytz/zoneinfo/America/Argentina/Mendoza | Bin 0 -> 1173 bytes pytz/zoneinfo/America/Argentina/Rio_Gallegos | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Argentina/Salta | Bin 0 -> 1101 bytes pytz/zoneinfo/America/Argentina/San_Juan | Bin 0 -> 1143 bytes pytz/zoneinfo/America/Argentina/San_Luis | Bin 0 -> 1171 bytes pytz/zoneinfo/America/Argentina/Tucuman | Bin 0 -> 1157 bytes pytz/zoneinfo/America/Argentina/Ushuaia | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Aruba | Bin 0 -> 208 bytes pytz/zoneinfo/America/Asuncion | Bin 0 -> 2062 bytes pytz/zoneinfo/America/Atikokan | Bin 0 -> 345 bytes pytz/zoneinfo/America/Atka | Bin 0 -> 2379 bytes pytz/zoneinfo/America/Bahia | Bin 0 -> 1036 bytes pytz/zoneinfo/America/Bahia_Banderas | Bin 0 -> 1588 bytes pytz/zoneinfo/America/Barbados | Bin 0 -> 344 bytes pytz/zoneinfo/America/Belem | Bin 0 -> 588 bytes pytz/zoneinfo/America/Belize | Bin 0 -> 976 bytes pytz/zoneinfo/America/Blanc-Sablon | Bin 0 -> 307 bytes pytz/zoneinfo/America/Boa_Vista | Bin 0 -> 644 bytes pytz/zoneinfo/America/Bogota | Bin 0 -> 257 bytes pytz/zoneinfo/America/Boise | Bin 0 -> 2403 bytes pytz/zoneinfo/America/Buenos_Aires | Bin 0 -> 1087 bytes pytz/zoneinfo/America/Cambridge_Bay | Bin 0 -> 2098 bytes pytz/zoneinfo/America/Campo_Grande | Bin 0 -> 2015 bytes pytz/zoneinfo/America/Cancun | Bin 0 -> 1480 bytes pytz/zoneinfo/America/Caracas | Bin 0 -> 266 bytes pytz/zoneinfo/America/Catamarca | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Cayenne | Bin 0 -> 200 bytes pytz/zoneinfo/America/Cayman | Bin 0 -> 203 bytes pytz/zoneinfo/America/Chicago | Bin 0 -> 3585 bytes pytz/zoneinfo/America/Chihuahua | Bin 0 -> 1522 bytes pytz/zoneinfo/America/Coral_Harbour | Bin 0 -> 345 bytes pytz/zoneinfo/America/Cordoba | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Costa_Rica | Bin 0 -> 341 bytes pytz/zoneinfo/America/Creston | Bin 0 -> 233 bytes pytz/zoneinfo/America/Cuiaba | Bin 0 -> 1987 bytes pytz/zoneinfo/America/Curacao | Bin 0 -> 208 bytes pytz/zoneinfo/America/Danmarkshavn | Bin 0 -> 714 bytes pytz/zoneinfo/America/Dawson | Bin 0 -> 2093 bytes pytz/zoneinfo/America/Dawson_Creek | Bin 0 -> 1059 bytes pytz/zoneinfo/America/Denver | Bin 0 -> 2453 bytes pytz/zoneinfo/America/Detroit | Bin 0 -> 2216 bytes pytz/zoneinfo/America/Dominica | Bin 0 -> 170 bytes pytz/zoneinfo/America/Edmonton | Bin 0 -> 2402 bytes pytz/zoneinfo/America/Eirunepe | Bin 0 -> 684 bytes pytz/zoneinfo/America/El_Salvador | Bin 0 -> 250 bytes pytz/zoneinfo/America/Ensenada | Bin 0 -> 2356 bytes pytz/zoneinfo/America/Fort_Wayne | Bin 0 -> 1675 bytes pytz/zoneinfo/America/Fortaleza | Bin 0 -> 728 bytes pytz/zoneinfo/America/Glace_Bay | Bin 0 -> 2206 bytes pytz/zoneinfo/America/Godthab | Bin 0 -> 1877 bytes pytz/zoneinfo/America/Goose_Bay | Bin 0 -> 3219 bytes pytz/zoneinfo/America/Grand_Turk | Bin 0 -> 1287 bytes pytz/zoneinfo/America/Grenada | Bin 0 -> 170 bytes pytz/zoneinfo/America/Guadeloupe | Bin 0 -> 170 bytes pytz/zoneinfo/America/Guatemala | Bin 0 -> 306 bytes pytz/zoneinfo/America/Guayaquil | Bin 0 -> 203 bytes pytz/zoneinfo/America/Guyana | Bin 0 -> 270 bytes pytz/zoneinfo/America/Halifax | Bin 0 -> 3438 bytes pytz/zoneinfo/America/Havana | Bin 0 -> 2437 bytes pytz/zoneinfo/America/Hermosillo | Bin 0 -> 454 bytes pytz/zoneinfo/America/Indiana/Indianapolis | Bin 0 -> 1675 bytes pytz/zoneinfo/America/Indiana/Knox | Bin 0 -> 2437 bytes pytz/zoneinfo/America/Indiana/Marengo | Bin 0 -> 1731 bytes pytz/zoneinfo/America/Indiana/Petersburg | Bin 0 -> 1913 bytes pytz/zoneinfo/America/Indiana/Tell_City | Bin 0 -> 1735 bytes pytz/zoneinfo/America/Indiana/Vevay | Bin 0 -> 1423 bytes pytz/zoneinfo/America/Indiana/Vincennes | Bin 0 -> 1703 bytes pytz/zoneinfo/America/Indiana/Winamac | Bin 0 -> 1787 bytes pytz/zoneinfo/America/Indianapolis | Bin 0 -> 1675 bytes pytz/zoneinfo/America/Inuvik | Bin 0 -> 1928 bytes pytz/zoneinfo/America/Iqaluit | Bin 0 -> 2046 bytes pytz/zoneinfo/America/Jamaica | Bin 0 -> 507 bytes pytz/zoneinfo/America/Jujuy | Bin 0 -> 1145 bytes pytz/zoneinfo/America/Juneau | Bin 0 -> 2362 bytes pytz/zoneinfo/America/Kentucky/Louisville | Bin 0 -> 2781 bytes pytz/zoneinfo/America/Kentucky/Monticello | Bin 0 -> 2361 bytes pytz/zoneinfo/America/Knox_IN | Bin 0 -> 2437 bytes pytz/zoneinfo/America/Kralendijk | Bin 0 -> 208 bytes pytz/zoneinfo/America/La_Paz | Bin 0 -> 243 bytes pytz/zoneinfo/America/Lima | Bin 0 -> 417 bytes pytz/zoneinfo/America/Los_Angeles | Bin 0 -> 2845 bytes pytz/zoneinfo/America/Louisville | Bin 0 -> 2781 bytes pytz/zoneinfo/America/Lower_Princes | Bin 0 -> 208 bytes pytz/zoneinfo/America/Maceio | Bin 0 -> 756 bytes pytz/zoneinfo/America/Managua | Bin 0 -> 463 bytes pytz/zoneinfo/America/Manaus | Bin 0 -> 616 bytes pytz/zoneinfo/America/Marigot | Bin 0 -> 170 bytes pytz/zoneinfo/America/Martinique | Bin 0 -> 257 bytes pytz/zoneinfo/America/Matamoros | Bin 0 -> 1416 bytes pytz/zoneinfo/America/Mazatlan | Bin 0 -> 1564 bytes pytz/zoneinfo/America/Mendoza | Bin 0 -> 1173 bytes pytz/zoneinfo/America/Menominee | Bin 0 -> 2283 bytes pytz/zoneinfo/America/Merida | Bin 0 -> 1456 bytes pytz/zoneinfo/America/Metlakatla | Bin 0 -> 716 bytes pytz/zoneinfo/America/Mexico_City | Bin 0 -> 1618 bytes pytz/zoneinfo/America/Miquelon | Bin 0 -> 1684 bytes pytz/zoneinfo/America/Moncton | Bin 0 -> 3163 bytes pytz/zoneinfo/America/Monterrey | Bin 0 -> 1416 bytes pytz/zoneinfo/America/Montevideo | Bin 0 -> 2160 bytes pytz/zoneinfo/America/Montreal | Bin 0 -> 3503 bytes pytz/zoneinfo/America/Montserrat | Bin 0 -> 170 bytes pytz/zoneinfo/America/Nassau | Bin 0 -> 2284 bytes pytz/zoneinfo/America/New_York | Bin 0 -> 3545 bytes pytz/zoneinfo/America/Nipigon | Bin 0 -> 2131 bytes pytz/zoneinfo/America/Nome | Bin 0 -> 2376 bytes pytz/zoneinfo/America/Noronha | Bin 0 -> 728 bytes pytz/zoneinfo/America/North_Dakota/Beulah | Bin 0 -> 2389 bytes pytz/zoneinfo/America/North_Dakota/Center | Bin 0 -> 2389 bytes pytz/zoneinfo/America/North_Dakota/New_Salem | Bin 0 -> 2389 bytes pytz/zoneinfo/America/Ojinaga | Bin 0 -> 1522 bytes pytz/zoneinfo/America/Panama | Bin 0 -> 203 bytes pytz/zoneinfo/America/Pangnirtung | Bin 0 -> 2108 bytes pytz/zoneinfo/America/Paramaribo | Bin 0 -> 308 bytes pytz/zoneinfo/America/Phoenix | Bin 0 -> 353 bytes pytz/zoneinfo/America/Port-au-Prince | Bin 0 -> 1483 bytes pytz/zoneinfo/America/Port_of_Spain | Bin 0 -> 170 bytes pytz/zoneinfo/America/Porto_Acre | Bin 0 -> 656 bytes pytz/zoneinfo/America/Porto_Velho | Bin 0 -> 588 bytes pytz/zoneinfo/America/Puerto_Rico | Bin 0 -> 255 bytes pytz/zoneinfo/America/Rainy_River | Bin 0 -> 2131 bytes pytz/zoneinfo/America/Rankin_Inlet | Bin 0 -> 1930 bytes pytz/zoneinfo/America/Recife | Bin 0 -> 728 bytes pytz/zoneinfo/America/Regina | Bin 0 -> 994 bytes pytz/zoneinfo/America/Resolute | Bin 0 -> 1930 bytes pytz/zoneinfo/America/Rio_Branco | Bin 0 -> 656 bytes pytz/zoneinfo/America/Rosario | Bin 0 -> 1129 bytes pytz/zoneinfo/America/Santa_Isabel | Bin 0 -> 2356 bytes pytz/zoneinfo/America/Santarem | Bin 0 -> 626 bytes pytz/zoneinfo/America/Santiago | Bin 0 -> 2531 bytes pytz/zoneinfo/America/Santo_Domingo | Bin 0 -> 489 bytes pytz/zoneinfo/America/Sao_Paulo | Bin 0 -> 2015 bytes pytz/zoneinfo/America/Scoresbysund | Bin 0 -> 1925 bytes pytz/zoneinfo/America/Shiprock | Bin 0 -> 2453 bytes pytz/zoneinfo/America/Sitka | Bin 0 -> 2350 bytes pytz/zoneinfo/America/St_Barthelemy | Bin 0 -> 170 bytes pytz/zoneinfo/America/St_Johns | Bin 0 -> 3664 bytes pytz/zoneinfo/America/St_Kitts | Bin 0 -> 170 bytes pytz/zoneinfo/America/St_Lucia | Bin 0 -> 170 bytes pytz/zoneinfo/America/St_Thomas | Bin 0 -> 170 bytes pytz/zoneinfo/America/St_Vincent | Bin 0 -> 170 bytes pytz/zoneinfo/America/Swift_Current | Bin 0 -> 574 bytes pytz/zoneinfo/America/Tegucigalpa | Bin 0 -> 278 bytes pytz/zoneinfo/America/Thule | Bin 0 -> 1528 bytes pytz/zoneinfo/America/Thunder_Bay | Bin 0 -> 2211 bytes pytz/zoneinfo/America/Tijuana | Bin 0 -> 2356 bytes pytz/zoneinfo/America/Toronto | Bin 0 -> 3503 bytes pytz/zoneinfo/America/Tortola | Bin 0 -> 170 bytes pytz/zoneinfo/America/Vancouver | Bin 0 -> 2901 bytes pytz/zoneinfo/America/Virgin | Bin 0 -> 170 bytes pytz/zoneinfo/America/Whitehorse | Bin 0 -> 2093 bytes pytz/zoneinfo/America/Winnipeg | Bin 0 -> 2891 bytes pytz/zoneinfo/America/Yakutat | Bin 0 -> 2314 bytes pytz/zoneinfo/America/Yellowknife | Bin 0 -> 1980 bytes pytz/zoneinfo/Antarctica/Casey | Bin 0 -> 272 bytes pytz/zoneinfo/Antarctica/Davis | Bin 0 -> 290 bytes pytz/zoneinfo/Antarctica/DumontDUrville | Bin 0 -> 227 bytes pytz/zoneinfo/Antarctica/Macquarie | Bin 0 -> 1530 bytes pytz/zoneinfo/Antarctica/Mawson | Bin 0 -> 204 bytes pytz/zoneinfo/Antarctica/McMurdo | Bin 0 -> 2460 bytes pytz/zoneinfo/Antarctica/Palmer | Bin 0 -> 2054 bytes pytz/zoneinfo/Antarctica/Rothera | Bin 0 -> 173 bytes pytz/zoneinfo/Antarctica/South_Pole | Bin 0 -> 2460 bytes pytz/zoneinfo/Antarctica/Syowa | Bin 0 -> 174 bytes pytz/zoneinfo/Antarctica/Troll | Bin 0 -> 1161 bytes pytz/zoneinfo/Antarctica/Vostok | Bin 0 -> 174 bytes pytz/zoneinfo/Arctic/Longyearbyen | Bin 0 -> 2251 bytes pytz/zoneinfo/Asia/Aden | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Almaty | Bin 0 -> 936 bytes pytz/zoneinfo/Asia/Amman | Bin 0 -> 1877 bytes pytz/zoneinfo/Asia/Anadyr | Bin 0 -> 1197 bytes pytz/zoneinfo/Asia/Aqtau | Bin 0 -> 1142 bytes pytz/zoneinfo/Asia/Aqtobe | Bin 0 -> 1052 bytes pytz/zoneinfo/Asia/Ashgabat | Bin 0 -> 671 bytes pytz/zoneinfo/Asia/Ashkhabad | Bin 0 -> 671 bytes pytz/zoneinfo/Asia/Baghdad | Bin 0 -> 988 bytes pytz/zoneinfo/Asia/Bahrain | Bin 0 -> 209 bytes pytz/zoneinfo/Asia/Baku | Bin 0 -> 1956 bytes pytz/zoneinfo/Asia/Bangkok | Bin 0 -> 204 bytes pytz/zoneinfo/Asia/Beirut | Bin 0 -> 2175 bytes pytz/zoneinfo/Asia/Bishkek | Bin 0 -> 1061 bytes pytz/zoneinfo/Asia/Brunei | Bin 0 -> 201 bytes pytz/zoneinfo/Asia/Calcutta | Bin 0 -> 291 bytes pytz/zoneinfo/Asia/Chita | Bin 0 -> 1236 bytes pytz/zoneinfo/Asia/Choibalsan | Bin 0 -> 904 bytes pytz/zoneinfo/Asia/Chongqing | Bin 0 -> 414 bytes pytz/zoneinfo/Asia/Chungking | Bin 0 -> 414 bytes pytz/zoneinfo/Asia/Colombo | Bin 0 -> 389 bytes pytz/zoneinfo/Asia/Dacca | Bin 0 -> 390 bytes pytz/zoneinfo/Asia/Damascus | Bin 0 -> 2320 bytes pytz/zoneinfo/Asia/Dhaka | Bin 0 -> 390 bytes pytz/zoneinfo/Asia/Dili | Bin 0 -> 309 bytes pytz/zoneinfo/Asia/Dubai | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Dushanbe | Bin 0 -> 611 bytes pytz/zoneinfo/Asia/Gaza | Bin 0 -> 2313 bytes pytz/zoneinfo/Asia/Harbin | Bin 0 -> 414 bytes pytz/zoneinfo/Asia/Hebron | Bin 0 -> 2341 bytes pytz/zoneinfo/Asia/Ho_Chi_Minh | Bin 0 -> 373 bytes pytz/zoneinfo/Asia/Hong_Kong | Bin 0 -> 1189 bytes pytz/zoneinfo/Asia/Hovd | Bin 0 -> 848 bytes pytz/zoneinfo/Asia/Irkutsk | Bin 0 -> 1259 bytes pytz/zoneinfo/Asia/Istanbul | Bin 0 -> 2747 bytes pytz/zoneinfo/Asia/Jakarta | Bin 0 -> 370 bytes pytz/zoneinfo/Asia/Jayapura | Bin 0 -> 241 bytes pytz/zoneinfo/Asia/Jerusalem | Bin 0 -> 2265 bytes pytz/zoneinfo/Asia/Kabul | Bin 0 -> 199 bytes pytz/zoneinfo/Asia/Kamchatka | Bin 0 -> 1181 bytes pytz/zoneinfo/Asia/Karachi | Bin 0 -> 403 bytes pytz/zoneinfo/Asia/Kashgar | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Kathmandu | Bin 0 -> 212 bytes pytz/zoneinfo/Asia/Katmandu | Bin 0 -> 212 bytes pytz/zoneinfo/Asia/Khandyga | Bin 0 -> 1324 bytes pytz/zoneinfo/Asia/Kolkata | Bin 0 -> 291 bytes pytz/zoneinfo/Asia/Krasnoyarsk | Bin 0 -> 1226 bytes pytz/zoneinfo/Asia/Kuala_Lumpur | Bin 0 -> 398 bytes pytz/zoneinfo/Asia/Kuching | Bin 0 -> 519 bytes pytz/zoneinfo/Asia/Kuwait | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Macao | Bin 0 -> 795 bytes pytz/zoneinfo/Asia/Macau | Bin 0 -> 795 bytes pytz/zoneinfo/Asia/Magadan | Bin 0 -> 1227 bytes pytz/zoneinfo/Asia/Makassar | Bin 0 -> 280 bytes pytz/zoneinfo/Asia/Manila | Bin 0 -> 361 bytes pytz/zoneinfo/Asia/Muscat | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Nicosia | Bin 0 -> 2016 bytes pytz/zoneinfo/Asia/Novokuznetsk | Bin 0 -> 1248 bytes pytz/zoneinfo/Asia/Novosibirsk | Bin 0 -> 1208 bytes pytz/zoneinfo/Asia/Omsk | Bin 0 -> 1226 bytes pytz/zoneinfo/Asia/Oral | Bin 0 -> 1100 bytes pytz/zoneinfo/Asia/Phnom_Penh | Bin 0 -> 204 bytes pytz/zoneinfo/Asia/Pontianak | Bin 0 -> 375 bytes pytz/zoneinfo/Asia/Pyongyang | Bin 0 -> 279 bytes pytz/zoneinfo/Asia/Qatar | Bin 0 -> 209 bytes pytz/zoneinfo/Asia/Qyzylorda | Bin 0 -> 1082 bytes pytz/zoneinfo/Asia/Rangoon | Bin 0 -> 285 bytes pytz/zoneinfo/Asia/Riyadh | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Saigon | Bin 0 -> 373 bytes pytz/zoneinfo/Asia/Sakhalin | Bin 0 -> 1227 bytes pytz/zoneinfo/Asia/Samarkand | Bin 0 -> 691 bytes pytz/zoneinfo/Asia/Seoul | Bin 0 -> 571 bytes pytz/zoneinfo/Asia/Shanghai | Bin 0 -> 414 bytes pytz/zoneinfo/Asia/Singapore | Bin 0 -> 428 bytes pytz/zoneinfo/Asia/Srednekolymsk | Bin 0 -> 1237 bytes pytz/zoneinfo/Asia/Taipei | Bin 0 -> 800 bytes pytz/zoneinfo/Asia/Tashkent | Bin 0 -> 681 bytes pytz/zoneinfo/Asia/Tbilisi | Bin 0 -> 1142 bytes pytz/zoneinfo/Asia/Tehran | Bin 0 -> 1661 bytes pytz/zoneinfo/Asia/Tel_Aviv | Bin 0 -> 2265 bytes pytz/zoneinfo/Asia/Thimbu | Bin 0 -> 209 bytes pytz/zoneinfo/Asia/Thimphu | Bin 0 -> 209 bytes pytz/zoneinfo/Asia/Tokyo | Bin 0 -> 355 bytes pytz/zoneinfo/Asia/Ujung_Pandang | Bin 0 -> 280 bytes pytz/zoneinfo/Asia/Ulaanbaatar | Bin 0 -> 848 bytes pytz/zoneinfo/Asia/Ulan_Bator | Bin 0 -> 848 bytes pytz/zoneinfo/Asia/Urumqi | Bin 0 -> 171 bytes pytz/zoneinfo/Asia/Ust-Nera | Bin 0 -> 1293 bytes pytz/zoneinfo/Asia/Vientiane | Bin 0 -> 204 bytes pytz/zoneinfo/Asia/Vladivostok | Bin 0 -> 1227 bytes pytz/zoneinfo/Asia/Yakutsk | Bin 0 -> 1226 bytes pytz/zoneinfo/Asia/Yekaterinburg | Bin 0 -> 1334 bytes pytz/zoneinfo/Asia/Yerevan | Bin 0 -> 1277 bytes pytz/zoneinfo/Atlantic/Azores | Bin 0 -> 3488 bytes pytz/zoneinfo/Atlantic/Bermuda | Bin 0 -> 2004 bytes pytz/zoneinfo/Atlantic/Canary | Bin 0 -> 1913 bytes pytz/zoneinfo/Atlantic/Cape_Verde | Bin 0 -> 254 bytes pytz/zoneinfo/Atlantic/Faeroe | Bin 0 -> 1829 bytes pytz/zoneinfo/Atlantic/Faroe | Bin 0 -> 1829 bytes pytz/zoneinfo/Atlantic/Jan_Mayen | Bin 0 -> 2251 bytes pytz/zoneinfo/Atlantic/Madeira | Bin 0 -> 3478 bytes pytz/zoneinfo/Atlantic/Reykjavik | Bin 0 -> 1167 bytes pytz/zoneinfo/Atlantic/South_Georgia | Bin 0 -> 148 bytes pytz/zoneinfo/Atlantic/St_Helena | Bin 0 -> 170 bytes pytz/zoneinfo/Atlantic/Stanley | Bin 0 -> 1246 bytes pytz/zoneinfo/Australia/ACT | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/Adelaide | Bin 0 -> 2238 bytes pytz/zoneinfo/Australia/Brisbane | Bin 0 -> 452 bytes pytz/zoneinfo/Australia/Broken_Hill | Bin 0 -> 2274 bytes pytz/zoneinfo/Australia/Canberra | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/Currie | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/Darwin | Bin 0 -> 323 bytes pytz/zoneinfo/Australia/Eucla | Bin 0 -> 487 bytes pytz/zoneinfo/Australia/Hobart | Bin 0 -> 2335 bytes pytz/zoneinfo/Australia/LHI | Bin 0 -> 1859 bytes pytz/zoneinfo/Australia/Lindeman | Bin 0 -> 522 bytes pytz/zoneinfo/Australia/Lord_Howe | Bin 0 -> 1859 bytes pytz/zoneinfo/Australia/Melbourne | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/NSW | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/North | Bin 0 -> 323 bytes pytz/zoneinfo/Australia/Perth | Bin 0 -> 479 bytes pytz/zoneinfo/Australia/Queensland | Bin 0 -> 452 bytes pytz/zoneinfo/Australia/South | Bin 0 -> 2238 bytes pytz/zoneinfo/Australia/Sydney | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/Tasmania | Bin 0 -> 2335 bytes pytz/zoneinfo/Australia/Victoria | Bin 0 -> 2223 bytes pytz/zoneinfo/Australia/West | Bin 0 -> 479 bytes pytz/zoneinfo/Australia/Yancowinna | Bin 0 -> 2274 bytes pytz/zoneinfo/Brazil/Acre | Bin 0 -> 656 bytes pytz/zoneinfo/Brazil/DeNoronha | Bin 0 -> 728 bytes pytz/zoneinfo/Brazil/East | Bin 0 -> 2015 bytes pytz/zoneinfo/Brazil/West | Bin 0 -> 616 bytes pytz/zoneinfo/CET | Bin 0 -> 2102 bytes pytz/zoneinfo/CST6CDT | Bin 0 -> 2294 bytes pytz/zoneinfo/Canada/Atlantic | Bin 0 -> 3438 bytes pytz/zoneinfo/Canada/Central | Bin 0 -> 2891 bytes pytz/zoneinfo/Canada/East-Saskatchewan | Bin 0 -> 994 bytes pytz/zoneinfo/Canada/Eastern | Bin 0 -> 3503 bytes pytz/zoneinfo/Canada/Mountain | Bin 0 -> 2402 bytes pytz/zoneinfo/Canada/Newfoundland | Bin 0 -> 3664 bytes pytz/zoneinfo/Canada/Pacific | Bin 0 -> 2901 bytes pytz/zoneinfo/Canada/Saskatchewan | Bin 0 -> 994 bytes pytz/zoneinfo/Canada/Yukon | Bin 0 -> 2093 bytes pytz/zoneinfo/Chile/Continental | Bin 0 -> 2531 bytes pytz/zoneinfo/Chile/EasterIsland | Bin 0 -> 2295 bytes pytz/zoneinfo/Cuba | Bin 0 -> 2437 bytes pytz/zoneinfo/EET | Bin 0 -> 1876 bytes pytz/zoneinfo/EST | Bin 0 -> 127 bytes pytz/zoneinfo/EST5EDT | Bin 0 -> 2294 bytes pytz/zoneinfo/Egypt | Bin 0 -> 2779 bytes pytz/zoneinfo/Eire | Bin 0 -> 3559 bytes pytz/zoneinfo/Etc/GMT | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/GMT+0 | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/GMT+1 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+10 | Bin 0 -> 139 bytes pytz/zoneinfo/Etc/GMT+11 | Bin 0 -> 139 bytes pytz/zoneinfo/Etc/GMT+12 | Bin 0 -> 139 bytes pytz/zoneinfo/Etc/GMT+2 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+3 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+4 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+5 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+6 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+7 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+8 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT+9 | Bin 0 -> 135 bytes pytz/zoneinfo/Etc/GMT-0 | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/GMT-1 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-10 | Bin 0 -> 140 bytes pytz/zoneinfo/Etc/GMT-11 | Bin 0 -> 140 bytes pytz/zoneinfo/Etc/GMT-12 | Bin 0 -> 140 bytes pytz/zoneinfo/Etc/GMT-13 | Bin 0 -> 140 bytes pytz/zoneinfo/Etc/GMT-14 | Bin 0 -> 140 bytes pytz/zoneinfo/Etc/GMT-2 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-3 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-4 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-5 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-6 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-7 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-8 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT-9 | Bin 0 -> 136 bytes pytz/zoneinfo/Etc/GMT0 | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/Greenwich | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/UCT | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/UTC | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/Universal | Bin 0 -> 127 bytes pytz/zoneinfo/Etc/Zulu | Bin 0 -> 127 bytes pytz/zoneinfo/Europe/Amsterdam | Bin 0 -> 2943 bytes pytz/zoneinfo/Europe/Andorra | Bin 0 -> 1751 bytes pytz/zoneinfo/Europe/Athens | Bin 0 -> 2271 bytes pytz/zoneinfo/Europe/Belfast | Bin 0 -> 3687 bytes pytz/zoneinfo/Europe/Belgrade | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/Berlin | Bin 0 -> 2335 bytes pytz/zoneinfo/Europe/Bratislava | Bin 0 -> 2272 bytes pytz/zoneinfo/Europe/Brussels | Bin 0 -> 2970 bytes pytz/zoneinfo/Europe/Bucharest | Bin 0 -> 2221 bytes pytz/zoneinfo/Europe/Budapest | Bin 0 -> 2405 bytes pytz/zoneinfo/Europe/Busingen | Bin 0 -> 1918 bytes pytz/zoneinfo/Europe/Chisinau | Bin 0 -> 2433 bytes pytz/zoneinfo/Europe/Copenhagen | Bin 0 -> 2160 bytes pytz/zoneinfo/Europe/Dublin | Bin 0 -> 3559 bytes pytz/zoneinfo/Europe/Gibraltar | Bin 0 -> 3061 bytes pytz/zoneinfo/Europe/Guernsey | Bin 0 -> 3687 bytes pytz/zoneinfo/Europe/Helsinki | Bin 0 -> 1909 bytes pytz/zoneinfo/Europe/Isle_of_Man | Bin 0 -> 3687 bytes pytz/zoneinfo/Europe/Istanbul | Bin 0 -> 2747 bytes pytz/zoneinfo/Europe/Jersey | Bin 0 -> 3687 bytes pytz/zoneinfo/Europe/Kaliningrad | Bin 0 -> 1550 bytes pytz/zoneinfo/Europe/Kiev | Bin 0 -> 2097 bytes pytz/zoneinfo/Europe/Lisbon | Bin 0 -> 3453 bytes pytz/zoneinfo/Europe/Ljubljana | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/London | Bin 0 -> 3687 bytes pytz/zoneinfo/Europe/Luxembourg | Bin 0 -> 2974 bytes pytz/zoneinfo/Europe/Madrid | Bin 0 -> 2619 bytes pytz/zoneinfo/Europe/Malta | Bin 0 -> 2629 bytes pytz/zoneinfo/Europe/Mariehamn | Bin 0 -> 1909 bytes pytz/zoneinfo/Europe/Minsk | Bin 0 -> 1368 bytes pytz/zoneinfo/Europe/Monaco | Bin 0 -> 2953 bytes pytz/zoneinfo/Europe/Moscow | Bin 0 -> 1528 bytes pytz/zoneinfo/Europe/Nicosia | Bin 0 -> 2016 bytes pytz/zoneinfo/Europe/Oslo | Bin 0 -> 2251 bytes pytz/zoneinfo/Europe/Paris | Bin 0 -> 2971 bytes pytz/zoneinfo/Europe/Podgorica | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/Prague | Bin 0 -> 2272 bytes pytz/zoneinfo/Europe/Riga | Bin 0 -> 2235 bytes pytz/zoneinfo/Europe/Rome | Bin 0 -> 2678 bytes pytz/zoneinfo/Europe/Samara | Bin 0 -> 1394 bytes pytz/zoneinfo/Europe/San_Marino | Bin 0 -> 2678 bytes pytz/zoneinfo/Europe/Sarajevo | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/Simferopol | Bin 0 -> 1504 bytes pytz/zoneinfo/Europe/Skopje | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/Sofia | Bin 0 -> 2130 bytes pytz/zoneinfo/Europe/Stockholm | Bin 0 -> 1918 bytes pytz/zoneinfo/Europe/Tallinn | Bin 0 -> 2201 bytes pytz/zoneinfo/Europe/Tirane | Bin 0 -> 2098 bytes pytz/zoneinfo/Europe/Tiraspol | Bin 0 -> 2433 bytes pytz/zoneinfo/Europe/Uzhgorod | Bin 0 -> 2103 bytes pytz/zoneinfo/Europe/Vaduz | Bin 0 -> 1918 bytes pytz/zoneinfo/Europe/Vatican | Bin 0 -> 2678 bytes pytz/zoneinfo/Europe/Vienna | Bin 0 -> 2237 bytes pytz/zoneinfo/Europe/Vilnius | Bin 0 -> 2199 bytes pytz/zoneinfo/Europe/Volgograd | Bin 0 -> 1317 bytes pytz/zoneinfo/Europe/Warsaw | Bin 0 -> 2705 bytes pytz/zoneinfo/Europe/Zagreb | Bin 0 -> 1957 bytes pytz/zoneinfo/Europe/Zaporozhye | Bin 0 -> 2111 bytes pytz/zoneinfo/Europe/Zurich | Bin 0 -> 1918 bytes pytz/zoneinfo/Factory | Bin 0 -> 264 bytes pytz/zoneinfo/GB | Bin 0 -> 3687 bytes pytz/zoneinfo/GB-Eire | Bin 0 -> 3687 bytes pytz/zoneinfo/GMT | Bin 0 -> 127 bytes pytz/zoneinfo/GMT+0 | Bin 0 -> 127 bytes pytz/zoneinfo/GMT-0 | Bin 0 -> 127 bytes pytz/zoneinfo/GMT0 | Bin 0 -> 127 bytes pytz/zoneinfo/Greenwich | Bin 0 -> 127 bytes pytz/zoneinfo/HST | Bin 0 -> 128 bytes pytz/zoneinfo/Hongkong | Bin 0 -> 1189 bytes pytz/zoneinfo/Iceland | Bin 0 -> 1167 bytes pytz/zoneinfo/Indian/Antananarivo | Bin 0 -> 283 bytes pytz/zoneinfo/Indian/Chagos | Bin 0 -> 201 bytes pytz/zoneinfo/Indian/Christmas | Bin 0 -> 149 bytes pytz/zoneinfo/Indian/Cocos | Bin 0 -> 152 bytes pytz/zoneinfo/Indian/Comoro | Bin 0 -> 283 bytes pytz/zoneinfo/Indian/Kerguelen | Bin 0 -> 171 bytes pytz/zoneinfo/Indian/Mahe | Bin 0 -> 171 bytes pytz/zoneinfo/Indian/Maldives | Bin 0 -> 204 bytes pytz/zoneinfo/Indian/Mauritius | Bin 0 -> 253 bytes pytz/zoneinfo/Indian/Mayotte | Bin 0 -> 283 bytes pytz/zoneinfo/Indian/Reunion | Bin 0 -> 171 bytes pytz/zoneinfo/Iran | Bin 0 -> 1661 bytes pytz/zoneinfo/Israel | Bin 0 -> 2265 bytes pytz/zoneinfo/Jamaica | Bin 0 -> 507 bytes pytz/zoneinfo/Japan | Bin 0 -> 355 bytes pytz/zoneinfo/Kwajalein | Bin 0 -> 237 bytes pytz/zoneinfo/Libya | Bin 0 -> 655 bytes pytz/zoneinfo/MET | Bin 0 -> 2102 bytes pytz/zoneinfo/MST | Bin 0 -> 127 bytes pytz/zoneinfo/MST7MDT | Bin 0 -> 2294 bytes pytz/zoneinfo/Mexico/BajaNorte | Bin 0 -> 2356 bytes pytz/zoneinfo/Mexico/BajaSur | Bin 0 -> 1564 bytes pytz/zoneinfo/Mexico/General | Bin 0 -> 1618 bytes pytz/zoneinfo/NZ | Bin 0 -> 2460 bytes pytz/zoneinfo/NZ-CHAT | Bin 0 -> 2057 bytes pytz/zoneinfo/Navajo | Bin 0 -> 2453 bytes pytz/zoneinfo/PRC | Bin 0 -> 414 bytes pytz/zoneinfo/PST8PDT | Bin 0 -> 2294 bytes pytz/zoneinfo/Pacific/Apia | Bin 0 -> 1102 bytes pytz/zoneinfo/Pacific/Auckland | Bin 0 -> 2460 bytes pytz/zoneinfo/Pacific/Bougainville | Bin 0 -> 280 bytes pytz/zoneinfo/Pacific/Chatham | Bin 0 -> 2057 bytes pytz/zoneinfo/Pacific/Chuuk | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Easter | Bin 0 -> 2295 bytes pytz/zoneinfo/Pacific/Efate | Bin 0 -> 478 bytes pytz/zoneinfo/Pacific/Enderbury | Bin 0 -> 230 bytes pytz/zoneinfo/Pacific/Fakaofo | Bin 0 -> 197 bytes pytz/zoneinfo/Pacific/Fiji | Bin 0 -> 1074 bytes pytz/zoneinfo/Pacific/Funafuti | Bin 0 -> 150 bytes pytz/zoneinfo/Pacific/Galapagos | Bin 0 -> 211 bytes pytz/zoneinfo/Pacific/Gambier | Bin 0 -> 173 bytes pytz/zoneinfo/Pacific/Guadalcanal | Bin 0 -> 172 bytes pytz/zoneinfo/Pacific/Guam | Bin 0 -> 225 bytes pytz/zoneinfo/Pacific/Honolulu | Bin 0 -> 276 bytes pytz/zoneinfo/Pacific/Johnston | Bin 0 -> 276 bytes pytz/zoneinfo/Pacific/Kiritimati | Bin 0 -> 230 bytes pytz/zoneinfo/Pacific/Kosrae | Bin 0 -> 230 bytes pytz/zoneinfo/Pacific/Kwajalein | Bin 0 -> 237 bytes pytz/zoneinfo/Pacific/Majuro | Bin 0 -> 197 bytes pytz/zoneinfo/Pacific/Marquesas | Bin 0 -> 176 bytes pytz/zoneinfo/Pacific/Midway | Bin 0 -> 294 bytes pytz/zoneinfo/Pacific/Nauru | Bin 0 -> 254 bytes pytz/zoneinfo/Pacific/Niue | Bin 0 -> 226 bytes pytz/zoneinfo/Pacific/Norfolk | Bin 0 -> 208 bytes pytz/zoneinfo/Pacific/Noumea | Bin 0 -> 314 bytes pytz/zoneinfo/Pacific/Pago_Pago | Bin 0 -> 272 bytes pytz/zoneinfo/Pacific/Palau | Bin 0 -> 149 bytes pytz/zoneinfo/Pacific/Pitcairn | Bin 0 -> 203 bytes pytz/zoneinfo/Pacific/Pohnpei | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Ponape | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Port_Moresby | Bin 0 -> 172 bytes pytz/zoneinfo/Pacific/Rarotonga | Bin 0 -> 574 bytes pytz/zoneinfo/Pacific/Saipan | Bin 0 -> 255 bytes pytz/zoneinfo/Pacific/Samoa | Bin 0 -> 272 bytes pytz/zoneinfo/Pacific/Tahiti | Bin 0 -> 174 bytes pytz/zoneinfo/Pacific/Tarawa | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Tongatapu | Bin 0 -> 339 bytes pytz/zoneinfo/Pacific/Truk | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Wake | Bin 0 -> 153 bytes pytz/zoneinfo/Pacific/Wallis | Bin 0 -> 150 bytes pytz/zoneinfo/Pacific/Yap | Bin 0 -> 153 bytes pytz/zoneinfo/Poland | Bin 0 -> 2705 bytes pytz/zoneinfo/Portugal | Bin 0 -> 3453 bytes pytz/zoneinfo/ROC | Bin 0 -> 800 bytes pytz/zoneinfo/ROK | Bin 0 -> 571 bytes pytz/zoneinfo/Singapore | Bin 0 -> 428 bytes pytz/zoneinfo/Turkey | Bin 0 -> 2747 bytes pytz/zoneinfo/UCT | Bin 0 -> 127 bytes pytz/zoneinfo/US/Alaska | Bin 0 -> 2384 bytes pytz/zoneinfo/US/Aleutian | Bin 0 -> 2379 bytes pytz/zoneinfo/US/Arizona | Bin 0 -> 353 bytes pytz/zoneinfo/US/Central | Bin 0 -> 3585 bytes pytz/zoneinfo/US/East-Indiana | Bin 0 -> 1675 bytes pytz/zoneinfo/US/Eastern | Bin 0 -> 3545 bytes pytz/zoneinfo/US/Hawaii | Bin 0 -> 276 bytes pytz/zoneinfo/US/Indiana-Starke | Bin 0 -> 2437 bytes pytz/zoneinfo/US/Michigan | Bin 0 -> 2216 bytes pytz/zoneinfo/US/Mountain | Bin 0 -> 2453 bytes pytz/zoneinfo/US/Pacific | Bin 0 -> 2845 bytes pytz/zoneinfo/US/Pacific-New | Bin 0 -> 2845 bytes pytz/zoneinfo/US/Samoa | Bin 0 -> 272 bytes pytz/zoneinfo/UTC | Bin 0 -> 127 bytes pytz/zoneinfo/Universal | Bin 0 -> 127 bytes pytz/zoneinfo/W-SU | Bin 0 -> 1528 bytes pytz/zoneinfo/WET | Bin 0 -> 1873 bytes pytz/zoneinfo/Zulu | Bin 0 -> 127 bytes pytz/zoneinfo/iso3166.tab | 275 +++++ pytz/zoneinfo/localtime | Bin 0 -> 127 bytes pytz/zoneinfo/posixrules | Bin 0 -> 3545 bytes pytz/zoneinfo/zone.tab | 440 +++++++ pytz/zoneinfo/zone1970.tab | 371 ++++++ setup.cfg | 5 + setup.py | 52 + 609 files changed, 7337 insertions(+) create mode 100644 CHANGES.txt create mode 100644 LICENSE.txt create mode 100644 MANIFEST.in create mode 100644 PKG-INFO create mode 100644 README.txt create mode 100644 pytz.egg-info/PKG-INFO create mode 100644 pytz.egg-info/SOURCES.txt create mode 100644 pytz.egg-info/dependency_links.txt create mode 100644 pytz.egg-info/top_level.txt create mode 100644 pytz.egg-info/zip-safe create mode 100644 pytz/__init__.py create mode 100644 pytz/exceptions.py create mode 100644 pytz/lazy.py create mode 100644 pytz/reference.py create mode 100644 pytz/tests/test_docs.py create mode 100644 pytz/tests/test_lazy.py create mode 100644 pytz/tests/test_tzinfo.py create mode 100644 pytz/tzfile.py create mode 100644 pytz/tzinfo.py create mode 100644 pytz/zoneinfo/Africa/Abidjan create mode 100644 pytz/zoneinfo/Africa/Accra create mode 100644 pytz/zoneinfo/Africa/Addis_Ababa create mode 100644 pytz/zoneinfo/Africa/Algiers create mode 100644 pytz/zoneinfo/Africa/Asmara create mode 100644 pytz/zoneinfo/Africa/Asmera create mode 100644 pytz/zoneinfo/Africa/Bamako create mode 100644 pytz/zoneinfo/Africa/Bangui create mode 100644 pytz/zoneinfo/Africa/Banjul create mode 100644 pytz/zoneinfo/Africa/Bissau create mode 100644 pytz/zoneinfo/Africa/Blantyre create mode 100644 pytz/zoneinfo/Africa/Brazzaville create mode 100644 pytz/zoneinfo/Africa/Bujumbura create mode 100644 pytz/zoneinfo/Africa/Cairo create mode 100644 pytz/zoneinfo/Africa/Casablanca create mode 100644 pytz/zoneinfo/Africa/Ceuta create mode 100644 pytz/zoneinfo/Africa/Conakry create mode 100644 pytz/zoneinfo/Africa/Dakar create mode 100644 pytz/zoneinfo/Africa/Dar_es_Salaam create mode 100644 pytz/zoneinfo/Africa/Djibouti create mode 100644 pytz/zoneinfo/Africa/Douala create mode 100644 pytz/zoneinfo/Africa/El_Aaiun create mode 100644 pytz/zoneinfo/Africa/Freetown create mode 100644 pytz/zoneinfo/Africa/Gaborone create mode 100644 pytz/zoneinfo/Africa/Harare create mode 100644 pytz/zoneinfo/Africa/Johannesburg create mode 100644 pytz/zoneinfo/Africa/Juba create mode 100644 pytz/zoneinfo/Africa/Kampala create mode 100644 pytz/zoneinfo/Africa/Khartoum create mode 100644 pytz/zoneinfo/Africa/Kigali create mode 100644 pytz/zoneinfo/Africa/Kinshasa create mode 100644 pytz/zoneinfo/Africa/Lagos create mode 100644 pytz/zoneinfo/Africa/Libreville create mode 100644 pytz/zoneinfo/Africa/Lome create mode 100644 pytz/zoneinfo/Africa/Luanda create mode 100644 pytz/zoneinfo/Africa/Lubumbashi create mode 100644 pytz/zoneinfo/Africa/Lusaka create mode 100644 pytz/zoneinfo/Africa/Malabo create mode 100644 pytz/zoneinfo/Africa/Maputo create mode 100644 pytz/zoneinfo/Africa/Maseru create mode 100644 pytz/zoneinfo/Africa/Mbabane create mode 100644 pytz/zoneinfo/Africa/Mogadishu create mode 100644 pytz/zoneinfo/Africa/Monrovia create mode 100644 pytz/zoneinfo/Africa/Nairobi create mode 100644 pytz/zoneinfo/Africa/Ndjamena create mode 100644 pytz/zoneinfo/Africa/Niamey create mode 100644 pytz/zoneinfo/Africa/Nouakchott create mode 100644 pytz/zoneinfo/Africa/Ouagadougou create mode 100644 pytz/zoneinfo/Africa/Porto-Novo create mode 100644 pytz/zoneinfo/Africa/Sao_Tome create mode 100644 pytz/zoneinfo/Africa/Timbuktu create mode 100644 pytz/zoneinfo/Africa/Tripoli create mode 100644 pytz/zoneinfo/Africa/Tunis create mode 100644 pytz/zoneinfo/Africa/Windhoek create mode 100644 pytz/zoneinfo/America/Adak create mode 100644 pytz/zoneinfo/America/Anchorage create mode 100644 pytz/zoneinfo/America/Anguilla create mode 100644 pytz/zoneinfo/America/Antigua create mode 100644 pytz/zoneinfo/America/Araguaina create mode 100644 pytz/zoneinfo/America/Argentina/Buenos_Aires create mode 100644 pytz/zoneinfo/America/Argentina/Catamarca create mode 100644 pytz/zoneinfo/America/Argentina/ComodRivadavia create mode 100644 pytz/zoneinfo/America/Argentina/Cordoba create mode 100644 pytz/zoneinfo/America/Argentina/Jujuy create mode 100644 pytz/zoneinfo/America/Argentina/La_Rioja create mode 100644 pytz/zoneinfo/America/Argentina/Mendoza create mode 100644 pytz/zoneinfo/America/Argentina/Rio_Gallegos create mode 100644 pytz/zoneinfo/America/Argentina/Salta create mode 100644 pytz/zoneinfo/America/Argentina/San_Juan create mode 100644 pytz/zoneinfo/America/Argentina/San_Luis create mode 100644 pytz/zoneinfo/America/Argentina/Tucuman create mode 100644 pytz/zoneinfo/America/Argentina/Ushuaia create mode 100644 pytz/zoneinfo/America/Aruba create mode 100644 pytz/zoneinfo/America/Asuncion create mode 100644 pytz/zoneinfo/America/Atikokan create mode 100644 pytz/zoneinfo/America/Atka create mode 100644 pytz/zoneinfo/America/Bahia create mode 100644 pytz/zoneinfo/America/Bahia_Banderas create mode 100644 pytz/zoneinfo/America/Barbados create mode 100644 pytz/zoneinfo/America/Belem create mode 100644 pytz/zoneinfo/America/Belize create mode 100644 pytz/zoneinfo/America/Blanc-Sablon create mode 100644 pytz/zoneinfo/America/Boa_Vista create mode 100644 pytz/zoneinfo/America/Bogota create mode 100644 pytz/zoneinfo/America/Boise create mode 100644 pytz/zoneinfo/America/Buenos_Aires create mode 100644 pytz/zoneinfo/America/Cambridge_Bay create mode 100644 pytz/zoneinfo/America/Campo_Grande create mode 100644 pytz/zoneinfo/America/Cancun create mode 100644 pytz/zoneinfo/America/Caracas create mode 100644 pytz/zoneinfo/America/Catamarca create mode 100644 pytz/zoneinfo/America/Cayenne create mode 100644 pytz/zoneinfo/America/Cayman create mode 100644 pytz/zoneinfo/America/Chicago create mode 100644 pytz/zoneinfo/America/Chihuahua create mode 100644 pytz/zoneinfo/America/Coral_Harbour create mode 100644 pytz/zoneinfo/America/Cordoba create mode 100644 pytz/zoneinfo/America/Costa_Rica create mode 100644 pytz/zoneinfo/America/Creston create mode 100644 pytz/zoneinfo/America/Cuiaba create mode 100644 pytz/zoneinfo/America/Curacao create mode 100644 pytz/zoneinfo/America/Danmarkshavn create mode 100644 pytz/zoneinfo/America/Dawson create mode 100644 pytz/zoneinfo/America/Dawson_Creek create mode 100644 pytz/zoneinfo/America/Denver create mode 100644 pytz/zoneinfo/America/Detroit create mode 100644 pytz/zoneinfo/America/Dominica create mode 100644 pytz/zoneinfo/America/Edmonton create mode 100644 pytz/zoneinfo/America/Eirunepe create mode 100644 pytz/zoneinfo/America/El_Salvador create mode 100644 pytz/zoneinfo/America/Ensenada create mode 100644 pytz/zoneinfo/America/Fort_Wayne create mode 100644 pytz/zoneinfo/America/Fortaleza create mode 100644 pytz/zoneinfo/America/Glace_Bay create mode 100644 pytz/zoneinfo/America/Godthab create mode 100644 pytz/zoneinfo/America/Goose_Bay create mode 100644 pytz/zoneinfo/America/Grand_Turk create mode 100644 pytz/zoneinfo/America/Grenada create mode 100644 pytz/zoneinfo/America/Guadeloupe create mode 100644 pytz/zoneinfo/America/Guatemala create mode 100644 pytz/zoneinfo/America/Guayaquil create mode 100644 pytz/zoneinfo/America/Guyana create mode 100644 pytz/zoneinfo/America/Halifax create mode 100644 pytz/zoneinfo/America/Havana create mode 100644 pytz/zoneinfo/America/Hermosillo create mode 100644 pytz/zoneinfo/America/Indiana/Indianapolis create mode 100644 pytz/zoneinfo/America/Indiana/Knox create mode 100644 pytz/zoneinfo/America/Indiana/Marengo create mode 100644 pytz/zoneinfo/America/Indiana/Petersburg create mode 100644 pytz/zoneinfo/America/Indiana/Tell_City create mode 100644 pytz/zoneinfo/America/Indiana/Vevay create mode 100644 pytz/zoneinfo/America/Indiana/Vincennes create mode 100644 pytz/zoneinfo/America/Indiana/Winamac create mode 100644 pytz/zoneinfo/America/Indianapolis create mode 100644 pytz/zoneinfo/America/Inuvik create mode 100644 pytz/zoneinfo/America/Iqaluit create mode 100644 pytz/zoneinfo/America/Jamaica create mode 100644 pytz/zoneinfo/America/Jujuy create mode 100644 pytz/zoneinfo/America/Juneau create mode 100644 pytz/zoneinfo/America/Kentucky/Louisville create mode 100644 pytz/zoneinfo/America/Kentucky/Monticello create mode 100644 pytz/zoneinfo/America/Knox_IN create mode 100644 pytz/zoneinfo/America/Kralendijk create mode 100644 pytz/zoneinfo/America/La_Paz create mode 100644 pytz/zoneinfo/America/Lima create mode 100644 pytz/zoneinfo/America/Los_Angeles create mode 100644 pytz/zoneinfo/America/Louisville create mode 100644 pytz/zoneinfo/America/Lower_Princes create mode 100644 pytz/zoneinfo/America/Maceio create mode 100644 pytz/zoneinfo/America/Managua create mode 100644 pytz/zoneinfo/America/Manaus create mode 100644 pytz/zoneinfo/America/Marigot create mode 100644 pytz/zoneinfo/America/Martinique create mode 100644 pytz/zoneinfo/America/Matamoros create mode 100644 pytz/zoneinfo/America/Mazatlan create mode 100644 pytz/zoneinfo/America/Mendoza create mode 100644 pytz/zoneinfo/America/Menominee create mode 100644 pytz/zoneinfo/America/Merida create mode 100644 pytz/zoneinfo/America/Metlakatla create mode 100644 pytz/zoneinfo/America/Mexico_City create mode 100644 pytz/zoneinfo/America/Miquelon create mode 100644 pytz/zoneinfo/America/Moncton create mode 100644 pytz/zoneinfo/America/Monterrey create mode 100644 pytz/zoneinfo/America/Montevideo create mode 100644 pytz/zoneinfo/America/Montreal create mode 100644 pytz/zoneinfo/America/Montserrat create mode 100644 pytz/zoneinfo/America/Nassau create mode 100644 pytz/zoneinfo/America/New_York create mode 100644 pytz/zoneinfo/America/Nipigon create mode 100644 pytz/zoneinfo/America/Nome create mode 100644 pytz/zoneinfo/America/Noronha create mode 100644 pytz/zoneinfo/America/North_Dakota/Beulah create mode 100644 pytz/zoneinfo/America/North_Dakota/Center create mode 100644 pytz/zoneinfo/America/North_Dakota/New_Salem create mode 100644 pytz/zoneinfo/America/Ojinaga create mode 100644 pytz/zoneinfo/America/Panama create mode 100644 pytz/zoneinfo/America/Pangnirtung create mode 100644 pytz/zoneinfo/America/Paramaribo create mode 100644 pytz/zoneinfo/America/Phoenix create mode 100644 pytz/zoneinfo/America/Port-au-Prince create mode 100644 pytz/zoneinfo/America/Port_of_Spain create mode 100644 pytz/zoneinfo/America/Porto_Acre create mode 100644 pytz/zoneinfo/America/Porto_Velho create mode 100644 pytz/zoneinfo/America/Puerto_Rico create mode 100644 pytz/zoneinfo/America/Rainy_River create mode 100644 pytz/zoneinfo/America/Rankin_Inlet create mode 100644 pytz/zoneinfo/America/Recife create mode 100644 pytz/zoneinfo/America/Regina create mode 100644 pytz/zoneinfo/America/Resolute create mode 100644 pytz/zoneinfo/America/Rio_Branco create mode 100644 pytz/zoneinfo/America/Rosario create mode 100644 pytz/zoneinfo/America/Santa_Isabel create mode 100644 pytz/zoneinfo/America/Santarem create mode 100644 pytz/zoneinfo/America/Santiago create mode 100644 pytz/zoneinfo/America/Santo_Domingo create mode 100644 pytz/zoneinfo/America/Sao_Paulo create mode 100644 pytz/zoneinfo/America/Scoresbysund create mode 100644 pytz/zoneinfo/America/Shiprock create mode 100644 pytz/zoneinfo/America/Sitka create mode 100644 pytz/zoneinfo/America/St_Barthelemy create mode 100644 pytz/zoneinfo/America/St_Johns create mode 100644 pytz/zoneinfo/America/St_Kitts create mode 100644 pytz/zoneinfo/America/St_Lucia create mode 100644 pytz/zoneinfo/America/St_Thomas create mode 100644 pytz/zoneinfo/America/St_Vincent create mode 100644 pytz/zoneinfo/America/Swift_Current create mode 100644 pytz/zoneinfo/America/Tegucigalpa create mode 100644 pytz/zoneinfo/America/Thule create mode 100644 pytz/zoneinfo/America/Thunder_Bay create mode 100644 pytz/zoneinfo/America/Tijuana create mode 100644 pytz/zoneinfo/America/Toronto create mode 100644 pytz/zoneinfo/America/Tortola create mode 100644 pytz/zoneinfo/America/Vancouver create mode 100644 pytz/zoneinfo/America/Virgin create mode 100644 pytz/zoneinfo/America/Whitehorse create mode 100644 pytz/zoneinfo/America/Winnipeg create mode 100644 pytz/zoneinfo/America/Yakutat create mode 100644 pytz/zoneinfo/America/Yellowknife create mode 100644 pytz/zoneinfo/Antarctica/Casey create mode 100644 pytz/zoneinfo/Antarctica/Davis create mode 100644 pytz/zoneinfo/Antarctica/DumontDUrville create mode 100644 pytz/zoneinfo/Antarctica/Macquarie create mode 100644 pytz/zoneinfo/Antarctica/Mawson create mode 100644 pytz/zoneinfo/Antarctica/McMurdo create mode 100644 pytz/zoneinfo/Antarctica/Palmer create mode 100644 pytz/zoneinfo/Antarctica/Rothera create mode 100644 pytz/zoneinfo/Antarctica/South_Pole create mode 100644 pytz/zoneinfo/Antarctica/Syowa create mode 100644 pytz/zoneinfo/Antarctica/Troll create mode 100644 pytz/zoneinfo/Antarctica/Vostok create mode 100644 pytz/zoneinfo/Arctic/Longyearbyen create mode 100644 pytz/zoneinfo/Asia/Aden create mode 100644 pytz/zoneinfo/Asia/Almaty create mode 100644 pytz/zoneinfo/Asia/Amman create mode 100644 pytz/zoneinfo/Asia/Anadyr create mode 100644 pytz/zoneinfo/Asia/Aqtau create mode 100644 pytz/zoneinfo/Asia/Aqtobe create mode 100644 pytz/zoneinfo/Asia/Ashgabat create mode 100644 pytz/zoneinfo/Asia/Ashkhabad create mode 100644 pytz/zoneinfo/Asia/Baghdad create mode 100644 pytz/zoneinfo/Asia/Bahrain create mode 100644 pytz/zoneinfo/Asia/Baku create mode 100644 pytz/zoneinfo/Asia/Bangkok create mode 100644 pytz/zoneinfo/Asia/Beirut create mode 100644 pytz/zoneinfo/Asia/Bishkek create mode 100644 pytz/zoneinfo/Asia/Brunei create mode 100644 pytz/zoneinfo/Asia/Calcutta create mode 100644 pytz/zoneinfo/Asia/Chita create mode 100644 pytz/zoneinfo/Asia/Choibalsan create mode 100644 pytz/zoneinfo/Asia/Chongqing create mode 100644 pytz/zoneinfo/Asia/Chungking create mode 100644 pytz/zoneinfo/Asia/Colombo create mode 100644 pytz/zoneinfo/Asia/Dacca create mode 100644 pytz/zoneinfo/Asia/Damascus create mode 100644 pytz/zoneinfo/Asia/Dhaka create mode 100644 pytz/zoneinfo/Asia/Dili create mode 100644 pytz/zoneinfo/Asia/Dubai create mode 100644 pytz/zoneinfo/Asia/Dushanbe create mode 100644 pytz/zoneinfo/Asia/Gaza create mode 100644 pytz/zoneinfo/Asia/Harbin create mode 100644 pytz/zoneinfo/Asia/Hebron create mode 100644 pytz/zoneinfo/Asia/Ho_Chi_Minh create mode 100644 pytz/zoneinfo/Asia/Hong_Kong create mode 100644 pytz/zoneinfo/Asia/Hovd create mode 100644 pytz/zoneinfo/Asia/Irkutsk create mode 100644 pytz/zoneinfo/Asia/Istanbul create mode 100644 pytz/zoneinfo/Asia/Jakarta create mode 100644 pytz/zoneinfo/Asia/Jayapura create mode 100644 pytz/zoneinfo/Asia/Jerusalem create mode 100644 pytz/zoneinfo/Asia/Kabul create mode 100644 pytz/zoneinfo/Asia/Kamchatka create mode 100644 pytz/zoneinfo/Asia/Karachi create mode 100644 pytz/zoneinfo/Asia/Kashgar create mode 100644 pytz/zoneinfo/Asia/Kathmandu create mode 100644 pytz/zoneinfo/Asia/Katmandu create mode 100644 pytz/zoneinfo/Asia/Khandyga create mode 100644 pytz/zoneinfo/Asia/Kolkata create mode 100644 pytz/zoneinfo/Asia/Krasnoyarsk create mode 100644 pytz/zoneinfo/Asia/Kuala_Lumpur create mode 100644 pytz/zoneinfo/Asia/Kuching create mode 100644 pytz/zoneinfo/Asia/Kuwait create mode 100644 pytz/zoneinfo/Asia/Macao create mode 100644 pytz/zoneinfo/Asia/Macau create mode 100644 pytz/zoneinfo/Asia/Magadan create mode 100644 pytz/zoneinfo/Asia/Makassar create mode 100644 pytz/zoneinfo/Asia/Manila create mode 100644 pytz/zoneinfo/Asia/Muscat create mode 100644 pytz/zoneinfo/Asia/Nicosia create mode 100644 pytz/zoneinfo/Asia/Novokuznetsk create mode 100644 pytz/zoneinfo/Asia/Novosibirsk create mode 100644 pytz/zoneinfo/Asia/Omsk create mode 100644 pytz/zoneinfo/Asia/Oral create mode 100644 pytz/zoneinfo/Asia/Phnom_Penh create mode 100644 pytz/zoneinfo/Asia/Pontianak create mode 100644 pytz/zoneinfo/Asia/Pyongyang create mode 100644 pytz/zoneinfo/Asia/Qatar create mode 100644 pytz/zoneinfo/Asia/Qyzylorda create mode 100644 pytz/zoneinfo/Asia/Rangoon create mode 100644 pytz/zoneinfo/Asia/Riyadh create mode 100644 pytz/zoneinfo/Asia/Saigon create mode 100644 pytz/zoneinfo/Asia/Sakhalin create mode 100644 pytz/zoneinfo/Asia/Samarkand create mode 100644 pytz/zoneinfo/Asia/Seoul create mode 100644 pytz/zoneinfo/Asia/Shanghai create mode 100644 pytz/zoneinfo/Asia/Singapore create mode 100644 pytz/zoneinfo/Asia/Srednekolymsk create mode 100644 pytz/zoneinfo/Asia/Taipei create mode 100644 pytz/zoneinfo/Asia/Tashkent create mode 100644 pytz/zoneinfo/Asia/Tbilisi create mode 100644 pytz/zoneinfo/Asia/Tehran create mode 100644 pytz/zoneinfo/Asia/Tel_Aviv create mode 100644 pytz/zoneinfo/Asia/Thimbu create mode 100644 pytz/zoneinfo/Asia/Thimphu create mode 100644 pytz/zoneinfo/Asia/Tokyo create mode 100644 pytz/zoneinfo/Asia/Ujung_Pandang create mode 100644 pytz/zoneinfo/Asia/Ulaanbaatar create mode 100644 pytz/zoneinfo/Asia/Ulan_Bator create mode 100644 pytz/zoneinfo/Asia/Urumqi create mode 100644 pytz/zoneinfo/Asia/Ust-Nera create mode 100644 pytz/zoneinfo/Asia/Vientiane create mode 100644 pytz/zoneinfo/Asia/Vladivostok create mode 100644 pytz/zoneinfo/Asia/Yakutsk create mode 100644 pytz/zoneinfo/Asia/Yekaterinburg create mode 100644 pytz/zoneinfo/Asia/Yerevan create mode 100644 pytz/zoneinfo/Atlantic/Azores create mode 100644 pytz/zoneinfo/Atlantic/Bermuda create mode 100644 pytz/zoneinfo/Atlantic/Canary create mode 100644 pytz/zoneinfo/Atlantic/Cape_Verde create mode 100644 pytz/zoneinfo/Atlantic/Faeroe create mode 100644 pytz/zoneinfo/Atlantic/Faroe create mode 100644 pytz/zoneinfo/Atlantic/Jan_Mayen create mode 100644 pytz/zoneinfo/Atlantic/Madeira create mode 100644 pytz/zoneinfo/Atlantic/Reykjavik create mode 100644 pytz/zoneinfo/Atlantic/South_Georgia create mode 100644 pytz/zoneinfo/Atlantic/St_Helena create mode 100644 pytz/zoneinfo/Atlantic/Stanley create mode 100644 pytz/zoneinfo/Australia/ACT create mode 100644 pytz/zoneinfo/Australia/Adelaide create mode 100644 pytz/zoneinfo/Australia/Brisbane create mode 100644 pytz/zoneinfo/Australia/Broken_Hill create mode 100644 pytz/zoneinfo/Australia/Canberra create mode 100644 pytz/zoneinfo/Australia/Currie create mode 100644 pytz/zoneinfo/Australia/Darwin create mode 100644 pytz/zoneinfo/Australia/Eucla create mode 100644 pytz/zoneinfo/Australia/Hobart create mode 100644 pytz/zoneinfo/Australia/LHI create mode 100644 pytz/zoneinfo/Australia/Lindeman create mode 100644 pytz/zoneinfo/Australia/Lord_Howe create mode 100644 pytz/zoneinfo/Australia/Melbourne create mode 100644 pytz/zoneinfo/Australia/NSW create mode 100644 pytz/zoneinfo/Australia/North create mode 100644 pytz/zoneinfo/Australia/Perth create mode 100644 pytz/zoneinfo/Australia/Queensland create mode 100644 pytz/zoneinfo/Australia/South create mode 100644 pytz/zoneinfo/Australia/Sydney create mode 100644 pytz/zoneinfo/Australia/Tasmania create mode 100644 pytz/zoneinfo/Australia/Victoria create mode 100644 pytz/zoneinfo/Australia/West create mode 100644 pytz/zoneinfo/Australia/Yancowinna create mode 100644 pytz/zoneinfo/Brazil/Acre create mode 100644 pytz/zoneinfo/Brazil/DeNoronha create mode 100644 pytz/zoneinfo/Brazil/East create mode 100644 pytz/zoneinfo/Brazil/West create mode 100644 pytz/zoneinfo/CET create mode 100644 pytz/zoneinfo/CST6CDT create mode 100644 pytz/zoneinfo/Canada/Atlantic create mode 100644 pytz/zoneinfo/Canada/Central create mode 100644 pytz/zoneinfo/Canada/East-Saskatchewan create mode 100644 pytz/zoneinfo/Canada/Eastern create mode 100644 pytz/zoneinfo/Canada/Mountain create mode 100644 pytz/zoneinfo/Canada/Newfoundland create mode 100644 pytz/zoneinfo/Canada/Pacific create mode 100644 pytz/zoneinfo/Canada/Saskatchewan create mode 100644 pytz/zoneinfo/Canada/Yukon create mode 100644 pytz/zoneinfo/Chile/Continental create mode 100644 pytz/zoneinfo/Chile/EasterIsland create mode 100644 pytz/zoneinfo/Cuba create mode 100644 pytz/zoneinfo/EET create mode 100644 pytz/zoneinfo/EST create mode 100644 pytz/zoneinfo/EST5EDT create mode 100644 pytz/zoneinfo/Egypt create mode 100644 pytz/zoneinfo/Eire create mode 100644 pytz/zoneinfo/Etc/GMT create mode 100644 pytz/zoneinfo/Etc/GMT+0 create mode 100644 pytz/zoneinfo/Etc/GMT+1 create mode 100644 pytz/zoneinfo/Etc/GMT+10 create mode 100644 pytz/zoneinfo/Etc/GMT+11 create mode 100644 pytz/zoneinfo/Etc/GMT+12 create mode 100644 pytz/zoneinfo/Etc/GMT+2 create mode 100644 pytz/zoneinfo/Etc/GMT+3 create mode 100644 pytz/zoneinfo/Etc/GMT+4 create mode 100644 pytz/zoneinfo/Etc/GMT+5 create mode 100644 pytz/zoneinfo/Etc/GMT+6 create mode 100644 pytz/zoneinfo/Etc/GMT+7 create mode 100644 pytz/zoneinfo/Etc/GMT+8 create mode 100644 pytz/zoneinfo/Etc/GMT+9 create mode 100644 pytz/zoneinfo/Etc/GMT-0 create mode 100644 pytz/zoneinfo/Etc/GMT-1 create mode 100644 pytz/zoneinfo/Etc/GMT-10 create mode 100644 pytz/zoneinfo/Etc/GMT-11 create mode 100644 pytz/zoneinfo/Etc/GMT-12 create mode 100644 pytz/zoneinfo/Etc/GMT-13 create mode 100644 pytz/zoneinfo/Etc/GMT-14 create mode 100644 pytz/zoneinfo/Etc/GMT-2 create mode 100644 pytz/zoneinfo/Etc/GMT-3 create mode 100644 pytz/zoneinfo/Etc/GMT-4 create mode 100644 pytz/zoneinfo/Etc/GMT-5 create mode 100644 pytz/zoneinfo/Etc/GMT-6 create mode 100644 pytz/zoneinfo/Etc/GMT-7 create mode 100644 pytz/zoneinfo/Etc/GMT-8 create mode 100644 pytz/zoneinfo/Etc/GMT-9 create mode 100644 pytz/zoneinfo/Etc/GMT0 create mode 100644 pytz/zoneinfo/Etc/Greenwich create mode 100644 pytz/zoneinfo/Etc/UCT create mode 100644 pytz/zoneinfo/Etc/UTC create mode 100644 pytz/zoneinfo/Etc/Universal create mode 100644 pytz/zoneinfo/Etc/Zulu create mode 100644 pytz/zoneinfo/Europe/Amsterdam create mode 100644 pytz/zoneinfo/Europe/Andorra create mode 100644 pytz/zoneinfo/Europe/Athens create mode 100644 pytz/zoneinfo/Europe/Belfast create mode 100644 pytz/zoneinfo/Europe/Belgrade create mode 100644 pytz/zoneinfo/Europe/Berlin create mode 100644 pytz/zoneinfo/Europe/Bratislava create mode 100644 pytz/zoneinfo/Europe/Brussels create mode 100644 pytz/zoneinfo/Europe/Bucharest create mode 100644 pytz/zoneinfo/Europe/Budapest create mode 100644 pytz/zoneinfo/Europe/Busingen create mode 100644 pytz/zoneinfo/Europe/Chisinau create mode 100644 pytz/zoneinfo/Europe/Copenhagen create mode 100644 pytz/zoneinfo/Europe/Dublin create mode 100644 pytz/zoneinfo/Europe/Gibraltar create mode 100644 pytz/zoneinfo/Europe/Guernsey create mode 100644 pytz/zoneinfo/Europe/Helsinki create mode 100644 pytz/zoneinfo/Europe/Isle_of_Man create mode 100644 pytz/zoneinfo/Europe/Istanbul create mode 100644 pytz/zoneinfo/Europe/Jersey create mode 100644 pytz/zoneinfo/Europe/Kaliningrad create mode 100644 pytz/zoneinfo/Europe/Kiev create mode 100644 pytz/zoneinfo/Europe/Lisbon create mode 100644 pytz/zoneinfo/Europe/Ljubljana create mode 100644 pytz/zoneinfo/Europe/London create mode 100644 pytz/zoneinfo/Europe/Luxembourg create mode 100644 pytz/zoneinfo/Europe/Madrid create mode 100644 pytz/zoneinfo/Europe/Malta create mode 100644 pytz/zoneinfo/Europe/Mariehamn create mode 100644 pytz/zoneinfo/Europe/Minsk create mode 100644 pytz/zoneinfo/Europe/Monaco create mode 100644 pytz/zoneinfo/Europe/Moscow create mode 100644 pytz/zoneinfo/Europe/Nicosia create mode 100644 pytz/zoneinfo/Europe/Oslo create mode 100644 pytz/zoneinfo/Europe/Paris create mode 100644 pytz/zoneinfo/Europe/Podgorica create mode 100644 pytz/zoneinfo/Europe/Prague create mode 100644 pytz/zoneinfo/Europe/Riga create mode 100644 pytz/zoneinfo/Europe/Rome create mode 100644 pytz/zoneinfo/Europe/Samara create mode 100644 pytz/zoneinfo/Europe/San_Marino create mode 100644 pytz/zoneinfo/Europe/Sarajevo create mode 100644 pytz/zoneinfo/Europe/Simferopol create mode 100644 pytz/zoneinfo/Europe/Skopje create mode 100644 pytz/zoneinfo/Europe/Sofia create mode 100644 pytz/zoneinfo/Europe/Stockholm create mode 100644 pytz/zoneinfo/Europe/Tallinn create mode 100644 pytz/zoneinfo/Europe/Tirane create mode 100644 pytz/zoneinfo/Europe/Tiraspol create mode 100644 pytz/zoneinfo/Europe/Uzhgorod create mode 100644 pytz/zoneinfo/Europe/Vaduz create mode 100644 pytz/zoneinfo/Europe/Vatican create mode 100644 pytz/zoneinfo/Europe/Vienna create mode 100644 pytz/zoneinfo/Europe/Vilnius create mode 100644 pytz/zoneinfo/Europe/Volgograd create mode 100644 pytz/zoneinfo/Europe/Warsaw create mode 100644 pytz/zoneinfo/Europe/Zagreb create mode 100644 pytz/zoneinfo/Europe/Zaporozhye create mode 100644 pytz/zoneinfo/Europe/Zurich create mode 100644 pytz/zoneinfo/Factory create mode 100644 pytz/zoneinfo/GB create mode 100644 pytz/zoneinfo/GB-Eire create mode 100644 pytz/zoneinfo/GMT create mode 100644 pytz/zoneinfo/GMT+0 create mode 100644 pytz/zoneinfo/GMT-0 create mode 100644 pytz/zoneinfo/GMT0 create mode 100644 pytz/zoneinfo/Greenwich create mode 100644 pytz/zoneinfo/HST create mode 100644 pytz/zoneinfo/Hongkong create mode 100644 pytz/zoneinfo/Iceland create mode 100644 pytz/zoneinfo/Indian/Antananarivo create mode 100644 pytz/zoneinfo/Indian/Chagos create mode 100644 pytz/zoneinfo/Indian/Christmas create mode 100644 pytz/zoneinfo/Indian/Cocos create mode 100644 pytz/zoneinfo/Indian/Comoro create mode 100644 pytz/zoneinfo/Indian/Kerguelen create mode 100644 pytz/zoneinfo/Indian/Mahe create mode 100644 pytz/zoneinfo/Indian/Maldives create mode 100644 pytz/zoneinfo/Indian/Mauritius create mode 100644 pytz/zoneinfo/Indian/Mayotte create mode 100644 pytz/zoneinfo/Indian/Reunion create mode 100644 pytz/zoneinfo/Iran create mode 100644 pytz/zoneinfo/Israel create mode 100644 pytz/zoneinfo/Jamaica create mode 100644 pytz/zoneinfo/Japan create mode 100644 pytz/zoneinfo/Kwajalein create mode 100644 pytz/zoneinfo/Libya create mode 100644 pytz/zoneinfo/MET create mode 100644 pytz/zoneinfo/MST create mode 100644 pytz/zoneinfo/MST7MDT create mode 100644 pytz/zoneinfo/Mexico/BajaNorte create mode 100644 pytz/zoneinfo/Mexico/BajaSur create mode 100644 pytz/zoneinfo/Mexico/General create mode 100644 pytz/zoneinfo/NZ create mode 100644 pytz/zoneinfo/NZ-CHAT create mode 100644 pytz/zoneinfo/Navajo create mode 100644 pytz/zoneinfo/PRC create mode 100644 pytz/zoneinfo/PST8PDT create mode 100644 pytz/zoneinfo/Pacific/Apia create mode 100644 pytz/zoneinfo/Pacific/Auckland create mode 100644 pytz/zoneinfo/Pacific/Bougainville create mode 100644 pytz/zoneinfo/Pacific/Chatham create mode 100644 pytz/zoneinfo/Pacific/Chuuk create mode 100644 pytz/zoneinfo/Pacific/Easter create mode 100644 pytz/zoneinfo/Pacific/Efate create mode 100644 pytz/zoneinfo/Pacific/Enderbury create mode 100644 pytz/zoneinfo/Pacific/Fakaofo create mode 100644 pytz/zoneinfo/Pacific/Fiji create mode 100644 pytz/zoneinfo/Pacific/Funafuti create mode 100644 pytz/zoneinfo/Pacific/Galapagos create mode 100644 pytz/zoneinfo/Pacific/Gambier create mode 100644 pytz/zoneinfo/Pacific/Guadalcanal create mode 100644 pytz/zoneinfo/Pacific/Guam create mode 100644 pytz/zoneinfo/Pacific/Honolulu create mode 100644 pytz/zoneinfo/Pacific/Johnston create mode 100644 pytz/zoneinfo/Pacific/Kiritimati create mode 100644 pytz/zoneinfo/Pacific/Kosrae create mode 100644 pytz/zoneinfo/Pacific/Kwajalein create mode 100644 pytz/zoneinfo/Pacific/Majuro create mode 100644 pytz/zoneinfo/Pacific/Marquesas create mode 100644 pytz/zoneinfo/Pacific/Midway create mode 100644 pytz/zoneinfo/Pacific/Nauru create mode 100644 pytz/zoneinfo/Pacific/Niue create mode 100644 pytz/zoneinfo/Pacific/Norfolk create mode 100644 pytz/zoneinfo/Pacific/Noumea create mode 100644 pytz/zoneinfo/Pacific/Pago_Pago create mode 100644 pytz/zoneinfo/Pacific/Palau create mode 100644 pytz/zoneinfo/Pacific/Pitcairn create mode 100644 pytz/zoneinfo/Pacific/Pohnpei create mode 100644 pytz/zoneinfo/Pacific/Ponape create mode 100644 pytz/zoneinfo/Pacific/Port_Moresby create mode 100644 pytz/zoneinfo/Pacific/Rarotonga create mode 100644 pytz/zoneinfo/Pacific/Saipan create mode 100644 pytz/zoneinfo/Pacific/Samoa create mode 100644 pytz/zoneinfo/Pacific/Tahiti create mode 100644 pytz/zoneinfo/Pacific/Tarawa create mode 100644 pytz/zoneinfo/Pacific/Tongatapu create mode 100644 pytz/zoneinfo/Pacific/Truk create mode 100644 pytz/zoneinfo/Pacific/Wake create mode 100644 pytz/zoneinfo/Pacific/Wallis create mode 100644 pytz/zoneinfo/Pacific/Yap create mode 100644 pytz/zoneinfo/Poland create mode 100644 pytz/zoneinfo/Portugal create mode 100644 pytz/zoneinfo/ROC create mode 100644 pytz/zoneinfo/ROK create mode 100644 pytz/zoneinfo/Singapore create mode 100644 pytz/zoneinfo/Turkey create mode 100644 pytz/zoneinfo/UCT create mode 100644 pytz/zoneinfo/US/Alaska create mode 100644 pytz/zoneinfo/US/Aleutian create mode 100644 pytz/zoneinfo/US/Arizona create mode 100644 pytz/zoneinfo/US/Central create mode 100644 pytz/zoneinfo/US/East-Indiana create mode 100644 pytz/zoneinfo/US/Eastern create mode 100644 pytz/zoneinfo/US/Hawaii create mode 100644 pytz/zoneinfo/US/Indiana-Starke create mode 100644 pytz/zoneinfo/US/Michigan create mode 100644 pytz/zoneinfo/US/Mountain create mode 100644 pytz/zoneinfo/US/Pacific create mode 100644 pytz/zoneinfo/US/Pacific-New create mode 100644 pytz/zoneinfo/US/Samoa create mode 100644 pytz/zoneinfo/UTC create mode 100644 pytz/zoneinfo/Universal create mode 100644 pytz/zoneinfo/W-SU create mode 100644 pytz/zoneinfo/WET create mode 100644 pytz/zoneinfo/Zulu create mode 100644 pytz/zoneinfo/iso3166.tab create mode 100644 pytz/zoneinfo/localtime create mode 100644 pytz/zoneinfo/posixrules create mode 100644 pytz/zoneinfo/zone.tab create mode 100644 pytz/zoneinfo/zone1970.tab create mode 100644 setup.cfg create mode 100644 setup.py 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 + +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 + + 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 `_. The code that is used + to generate this distribution is hosted on launchpad.net and available + using the `Bazaar version control system `_ + using:: + + bzr branch lp:pytz + + Announcements of new releases are made on + `Launchpad `_, and the + `Atom feed `_ + hosted there. + + + Bugs, Feature Requests & Patches + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Bugs can be reported using `Launchpad `_. + + + 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 + + + +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 + +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 `_. The code that is used +to generate this distribution is hosted on launchpad.net and available +using the `Bazaar version control system `_ +using:: + + bzr branch lp:pytz + +Announcements of new releases are made on +`Launchpad `_, and the +`Atom feed `_ +hosted there. + + +Bugs, Feature Requests & Patches +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Bugs can be reported using `Launchpad `_. + + +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 + + 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 + + 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 `_. The code that is used + to generate this distribution is hosted on launchpad.net and available + using the `Bazaar version control system `_ + using:: + + bzr branch lp:pytz + + Announcements of new releases are made on + `Launchpad `_, and the + `Atom feed `_ + hosted there. + + + Bugs, Feature Requests & Patches + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Bugs can be reported using `Launchpad `_. + + + 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 + + + +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 "" + + 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 '' % (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 '' % ( + self.zone, self._tzname, self._utcoffset, dst + ) + else: + return '' % ( + 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 Binary files /dev/null and b/pytz/zoneinfo/Africa/Abidjan differ diff --git a/pytz/zoneinfo/Africa/Accra b/pytz/zoneinfo/Africa/Accra new file mode 100644 index 0000000..6ff8fb6 Binary files /dev/null and b/pytz/zoneinfo/Africa/Accra differ diff --git a/pytz/zoneinfo/Africa/Addis_Ababa b/pytz/zoneinfo/Africa/Addis_Ababa new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Addis_Ababa differ diff --git a/pytz/zoneinfo/Africa/Algiers b/pytz/zoneinfo/Africa/Algiers new file mode 100644 index 0000000..2a25f3a Binary files /dev/null and b/pytz/zoneinfo/Africa/Algiers differ diff --git a/pytz/zoneinfo/Africa/Asmara b/pytz/zoneinfo/Africa/Asmara new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Asmara differ diff --git a/pytz/zoneinfo/Africa/Asmera b/pytz/zoneinfo/Africa/Asmera new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Asmera differ diff --git a/pytz/zoneinfo/Africa/Bamako b/pytz/zoneinfo/Africa/Bamako new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Bamako differ diff --git a/pytz/zoneinfo/Africa/Bangui b/pytz/zoneinfo/Africa/Bangui new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Bangui differ diff --git a/pytz/zoneinfo/Africa/Banjul b/pytz/zoneinfo/Africa/Banjul new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Banjul differ diff --git a/pytz/zoneinfo/Africa/Bissau b/pytz/zoneinfo/Africa/Bissau new file mode 100644 index 0000000..0696667 Binary files /dev/null and b/pytz/zoneinfo/Africa/Bissau differ diff --git a/pytz/zoneinfo/Africa/Blantyre b/pytz/zoneinfo/Africa/Blantyre new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Blantyre differ diff --git a/pytz/zoneinfo/Africa/Brazzaville b/pytz/zoneinfo/Africa/Brazzaville new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Brazzaville differ diff --git a/pytz/zoneinfo/Africa/Bujumbura b/pytz/zoneinfo/Africa/Bujumbura new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Bujumbura differ diff --git a/pytz/zoneinfo/Africa/Cairo b/pytz/zoneinfo/Africa/Cairo new file mode 100644 index 0000000..0eeed11 Binary files /dev/null and b/pytz/zoneinfo/Africa/Cairo differ diff --git a/pytz/zoneinfo/Africa/Casablanca b/pytz/zoneinfo/Africa/Casablanca new file mode 100644 index 0000000..c001c37 Binary files /dev/null and b/pytz/zoneinfo/Africa/Casablanca differ diff --git a/pytz/zoneinfo/Africa/Ceuta b/pytz/zoneinfo/Africa/Ceuta new file mode 100644 index 0000000..6227e2b Binary files /dev/null and b/pytz/zoneinfo/Africa/Ceuta differ diff --git a/pytz/zoneinfo/Africa/Conakry b/pytz/zoneinfo/Africa/Conakry new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Conakry differ diff --git a/pytz/zoneinfo/Africa/Dakar b/pytz/zoneinfo/Africa/Dakar new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Dakar differ diff --git a/pytz/zoneinfo/Africa/Dar_es_Salaam b/pytz/zoneinfo/Africa/Dar_es_Salaam new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Dar_es_Salaam differ diff --git a/pytz/zoneinfo/Africa/Djibouti b/pytz/zoneinfo/Africa/Djibouti new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Djibouti differ diff --git a/pytz/zoneinfo/Africa/Douala b/pytz/zoneinfo/Africa/Douala new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Douala differ diff --git a/pytz/zoneinfo/Africa/El_Aaiun b/pytz/zoneinfo/Africa/El_Aaiun new file mode 100644 index 0000000..805d39e Binary files /dev/null and b/pytz/zoneinfo/Africa/El_Aaiun differ diff --git a/pytz/zoneinfo/Africa/Freetown b/pytz/zoneinfo/Africa/Freetown new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Freetown differ diff --git a/pytz/zoneinfo/Africa/Gaborone b/pytz/zoneinfo/Africa/Gaborone new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Gaborone differ diff --git a/pytz/zoneinfo/Africa/Harare b/pytz/zoneinfo/Africa/Harare new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Harare differ diff --git a/pytz/zoneinfo/Africa/Johannesburg b/pytz/zoneinfo/Africa/Johannesburg new file mode 100644 index 0000000..ddf3652 Binary files /dev/null and b/pytz/zoneinfo/Africa/Johannesburg differ diff --git a/pytz/zoneinfo/Africa/Juba b/pytz/zoneinfo/Africa/Juba new file mode 100644 index 0000000..3629188 Binary files /dev/null and b/pytz/zoneinfo/Africa/Juba differ diff --git a/pytz/zoneinfo/Africa/Kampala b/pytz/zoneinfo/Africa/Kampala new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Kampala differ diff --git a/pytz/zoneinfo/Africa/Khartoum b/pytz/zoneinfo/Africa/Khartoum new file mode 100644 index 0000000..3629188 Binary files /dev/null and b/pytz/zoneinfo/Africa/Khartoum differ diff --git a/pytz/zoneinfo/Africa/Kigali b/pytz/zoneinfo/Africa/Kigali new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Kigali differ diff --git a/pytz/zoneinfo/Africa/Kinshasa b/pytz/zoneinfo/Africa/Kinshasa new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Kinshasa differ diff --git a/pytz/zoneinfo/Africa/Lagos b/pytz/zoneinfo/Africa/Lagos new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Lagos differ diff --git a/pytz/zoneinfo/Africa/Libreville b/pytz/zoneinfo/Africa/Libreville new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Libreville differ diff --git a/pytz/zoneinfo/Africa/Lome b/pytz/zoneinfo/Africa/Lome new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Lome differ diff --git a/pytz/zoneinfo/Africa/Luanda b/pytz/zoneinfo/Africa/Luanda new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Luanda differ diff --git a/pytz/zoneinfo/Africa/Lubumbashi b/pytz/zoneinfo/Africa/Lubumbashi new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Lubumbashi differ diff --git a/pytz/zoneinfo/Africa/Lusaka b/pytz/zoneinfo/Africa/Lusaka new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Lusaka differ diff --git a/pytz/zoneinfo/Africa/Malabo b/pytz/zoneinfo/Africa/Malabo new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Malabo differ diff --git a/pytz/zoneinfo/Africa/Maputo b/pytz/zoneinfo/Africa/Maputo new file mode 100644 index 0000000..5b871db Binary files /dev/null and b/pytz/zoneinfo/Africa/Maputo differ diff --git a/pytz/zoneinfo/Africa/Maseru b/pytz/zoneinfo/Africa/Maseru new file mode 100644 index 0000000..ddf3652 Binary files /dev/null and b/pytz/zoneinfo/Africa/Maseru differ diff --git a/pytz/zoneinfo/Africa/Mbabane b/pytz/zoneinfo/Africa/Mbabane new file mode 100644 index 0000000..ddf3652 Binary files /dev/null and b/pytz/zoneinfo/Africa/Mbabane differ diff --git a/pytz/zoneinfo/Africa/Mogadishu b/pytz/zoneinfo/Africa/Mogadishu new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Mogadishu differ diff --git a/pytz/zoneinfo/Africa/Monrovia b/pytz/zoneinfo/Africa/Monrovia new file mode 100644 index 0000000..0f2294e Binary files /dev/null and b/pytz/zoneinfo/Africa/Monrovia differ diff --git a/pytz/zoneinfo/Africa/Nairobi b/pytz/zoneinfo/Africa/Nairobi new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Africa/Nairobi differ diff --git a/pytz/zoneinfo/Africa/Ndjamena b/pytz/zoneinfo/Africa/Ndjamena new file mode 100644 index 0000000..bbfe19d Binary files /dev/null and b/pytz/zoneinfo/Africa/Ndjamena differ diff --git a/pytz/zoneinfo/Africa/Niamey b/pytz/zoneinfo/Africa/Niamey new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Niamey differ diff --git a/pytz/zoneinfo/Africa/Nouakchott b/pytz/zoneinfo/Africa/Nouakchott new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Nouakchott differ diff --git a/pytz/zoneinfo/Africa/Ouagadougou b/pytz/zoneinfo/Africa/Ouagadougou new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Ouagadougou differ diff --git a/pytz/zoneinfo/Africa/Porto-Novo b/pytz/zoneinfo/Africa/Porto-Novo new file mode 100644 index 0000000..b1c97cc Binary files /dev/null and b/pytz/zoneinfo/Africa/Porto-Novo differ diff --git a/pytz/zoneinfo/Africa/Sao_Tome b/pytz/zoneinfo/Africa/Sao_Tome new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Sao_Tome differ diff --git a/pytz/zoneinfo/Africa/Timbuktu b/pytz/zoneinfo/Africa/Timbuktu new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Africa/Timbuktu differ diff --git a/pytz/zoneinfo/Africa/Tripoli b/pytz/zoneinfo/Africa/Tripoli new file mode 100644 index 0000000..b32e220 Binary files /dev/null and b/pytz/zoneinfo/Africa/Tripoli differ diff --git a/pytz/zoneinfo/Africa/Tunis b/pytz/zoneinfo/Africa/Tunis new file mode 100644 index 0000000..4bd3885 Binary files /dev/null and b/pytz/zoneinfo/Africa/Tunis differ diff --git a/pytz/zoneinfo/Africa/Windhoek b/pytz/zoneinfo/Africa/Windhoek new file mode 100644 index 0000000..33bdfdf Binary files /dev/null and b/pytz/zoneinfo/Africa/Windhoek differ diff --git a/pytz/zoneinfo/America/Adak b/pytz/zoneinfo/America/Adak new file mode 100644 index 0000000..b0a5dd6 Binary files /dev/null and b/pytz/zoneinfo/America/Adak differ diff --git a/pytz/zoneinfo/America/Anchorage b/pytz/zoneinfo/America/Anchorage new file mode 100644 index 0000000..a4627ca Binary files /dev/null and b/pytz/zoneinfo/America/Anchorage differ diff --git a/pytz/zoneinfo/America/Anguilla b/pytz/zoneinfo/America/Anguilla new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Anguilla differ diff --git a/pytz/zoneinfo/America/Antigua b/pytz/zoneinfo/America/Antigua new file mode 100644 index 0000000..66ab147 Binary files /dev/null and b/pytz/zoneinfo/America/Antigua differ diff --git a/pytz/zoneinfo/America/Araguaina b/pytz/zoneinfo/America/Araguaina new file mode 100644 index 0000000..507ea46 Binary files /dev/null and b/pytz/zoneinfo/America/Araguaina differ diff --git a/pytz/zoneinfo/America/Argentina/Buenos_Aires b/pytz/zoneinfo/America/Argentina/Buenos_Aires new file mode 100644 index 0000000..a1fae8c Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Buenos_Aires differ diff --git a/pytz/zoneinfo/America/Argentina/Catamarca b/pytz/zoneinfo/America/Argentina/Catamarca new file mode 100644 index 0000000..7cbc9f4 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Catamarca differ diff --git a/pytz/zoneinfo/America/Argentina/ComodRivadavia b/pytz/zoneinfo/America/Argentina/ComodRivadavia new file mode 100644 index 0000000..7cbc9f4 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/ComodRivadavia differ diff --git a/pytz/zoneinfo/America/Argentina/Cordoba b/pytz/zoneinfo/America/Argentina/Cordoba new file mode 100644 index 0000000..cd97a24 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Cordoba differ diff --git a/pytz/zoneinfo/America/Argentina/Jujuy b/pytz/zoneinfo/America/Argentina/Jujuy new file mode 100644 index 0000000..7be3eeb Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Jujuy differ diff --git a/pytz/zoneinfo/America/Argentina/La_Rioja b/pytz/zoneinfo/America/Argentina/La_Rioja new file mode 100644 index 0000000..1296ed4 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/La_Rioja differ diff --git a/pytz/zoneinfo/America/Argentina/Mendoza b/pytz/zoneinfo/America/Argentina/Mendoza new file mode 100644 index 0000000..f9eb526 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Mendoza differ diff --git a/pytz/zoneinfo/America/Argentina/Rio_Gallegos b/pytz/zoneinfo/America/Argentina/Rio_Gallegos new file mode 100644 index 0000000..8fd203d Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Rio_Gallegos differ diff --git a/pytz/zoneinfo/America/Argentina/Salta b/pytz/zoneinfo/America/Argentina/Salta new file mode 100644 index 0000000..5778059 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Salta differ diff --git a/pytz/zoneinfo/America/Argentina/San_Juan b/pytz/zoneinfo/America/Argentina/San_Juan new file mode 100644 index 0000000..8670279 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/San_Juan differ diff --git a/pytz/zoneinfo/America/Argentina/San_Luis b/pytz/zoneinfo/America/Argentina/San_Luis new file mode 100644 index 0000000..51eb1d8 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/San_Luis differ diff --git a/pytz/zoneinfo/America/Argentina/Tucuman b/pytz/zoneinfo/America/Argentina/Tucuman new file mode 100644 index 0000000..694093e Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Tucuman differ diff --git a/pytz/zoneinfo/America/Argentina/Ushuaia b/pytz/zoneinfo/America/Argentina/Ushuaia new file mode 100644 index 0000000..dc42621 Binary files /dev/null and b/pytz/zoneinfo/America/Argentina/Ushuaia differ diff --git a/pytz/zoneinfo/America/Aruba b/pytz/zoneinfo/America/Aruba new file mode 100644 index 0000000..05e77ab Binary files /dev/null and b/pytz/zoneinfo/America/Aruba differ diff --git a/pytz/zoneinfo/America/Asuncion b/pytz/zoneinfo/America/Asuncion new file mode 100644 index 0000000..79541fd Binary files /dev/null and b/pytz/zoneinfo/America/Asuncion differ diff --git a/pytz/zoneinfo/America/Atikokan b/pytz/zoneinfo/America/Atikokan new file mode 100644 index 0000000..5708b55 Binary files /dev/null and b/pytz/zoneinfo/America/Atikokan differ diff --git a/pytz/zoneinfo/America/Atka b/pytz/zoneinfo/America/Atka new file mode 100644 index 0000000..b0a5dd6 Binary files /dev/null and b/pytz/zoneinfo/America/Atka differ diff --git a/pytz/zoneinfo/America/Bahia b/pytz/zoneinfo/America/Bahia new file mode 100644 index 0000000..3b59958 Binary files /dev/null and b/pytz/zoneinfo/America/Bahia differ diff --git a/pytz/zoneinfo/America/Bahia_Banderas b/pytz/zoneinfo/America/Bahia_Banderas new file mode 100644 index 0000000..21e2b71 Binary files /dev/null and b/pytz/zoneinfo/America/Bahia_Banderas differ diff --git a/pytz/zoneinfo/America/Barbados b/pytz/zoneinfo/America/Barbados new file mode 100644 index 0000000..6339936 Binary files /dev/null and b/pytz/zoneinfo/America/Barbados differ diff --git a/pytz/zoneinfo/America/Belem b/pytz/zoneinfo/America/Belem new file mode 100644 index 0000000..d85c0f7 Binary files /dev/null and b/pytz/zoneinfo/America/Belem differ diff --git a/pytz/zoneinfo/America/Belize b/pytz/zoneinfo/America/Belize new file mode 100644 index 0000000..eada52e Binary files /dev/null and b/pytz/zoneinfo/America/Belize differ diff --git a/pytz/zoneinfo/America/Blanc-Sablon b/pytz/zoneinfo/America/Blanc-Sablon new file mode 100644 index 0000000..abcde7d Binary files /dev/null and b/pytz/zoneinfo/America/Blanc-Sablon differ diff --git a/pytz/zoneinfo/America/Boa_Vista b/pytz/zoneinfo/America/Boa_Vista new file mode 100644 index 0000000..2466a25 Binary files /dev/null and b/pytz/zoneinfo/America/Boa_Vista differ diff --git a/pytz/zoneinfo/America/Bogota b/pytz/zoneinfo/America/Bogota new file mode 100644 index 0000000..7a5a445 Binary files /dev/null and b/pytz/zoneinfo/America/Bogota differ diff --git a/pytz/zoneinfo/America/Boise b/pytz/zoneinfo/America/Boise new file mode 100644 index 0000000..ada6d64 Binary files /dev/null and b/pytz/zoneinfo/America/Boise differ diff --git a/pytz/zoneinfo/America/Buenos_Aires b/pytz/zoneinfo/America/Buenos_Aires new file mode 100644 index 0000000..a1fae8c Binary files /dev/null and b/pytz/zoneinfo/America/Buenos_Aires differ diff --git a/pytz/zoneinfo/America/Cambridge_Bay b/pytz/zoneinfo/America/Cambridge_Bay new file mode 100644 index 0000000..58e21ba Binary files /dev/null and b/pytz/zoneinfo/America/Cambridge_Bay differ diff --git a/pytz/zoneinfo/America/Campo_Grande b/pytz/zoneinfo/America/Campo_Grande new file mode 100644 index 0000000..d810ae5 Binary files /dev/null and b/pytz/zoneinfo/America/Campo_Grande differ diff --git a/pytz/zoneinfo/America/Cancun b/pytz/zoneinfo/America/Cancun new file mode 100644 index 0000000..a99eedd Binary files /dev/null and b/pytz/zoneinfo/America/Cancun differ diff --git a/pytz/zoneinfo/America/Caracas b/pytz/zoneinfo/America/Caracas new file mode 100644 index 0000000..15b9a52 Binary files /dev/null and b/pytz/zoneinfo/America/Caracas differ diff --git a/pytz/zoneinfo/America/Catamarca b/pytz/zoneinfo/America/Catamarca new file mode 100644 index 0000000..7cbc9f4 Binary files /dev/null and b/pytz/zoneinfo/America/Catamarca differ diff --git a/pytz/zoneinfo/America/Cayenne b/pytz/zoneinfo/America/Cayenne new file mode 100644 index 0000000..bffe9b0 Binary files /dev/null and b/pytz/zoneinfo/America/Cayenne differ diff --git a/pytz/zoneinfo/America/Cayman b/pytz/zoneinfo/America/Cayman new file mode 100644 index 0000000..0eb14b7 Binary files /dev/null and b/pytz/zoneinfo/America/Cayman differ diff --git a/pytz/zoneinfo/America/Chicago b/pytz/zoneinfo/America/Chicago new file mode 100644 index 0000000..3dd8f0f Binary files /dev/null and b/pytz/zoneinfo/America/Chicago differ diff --git a/pytz/zoneinfo/America/Chihuahua b/pytz/zoneinfo/America/Chihuahua new file mode 100644 index 0000000..e3adbdb Binary files /dev/null and b/pytz/zoneinfo/America/Chihuahua differ diff --git a/pytz/zoneinfo/America/Coral_Harbour b/pytz/zoneinfo/America/Coral_Harbour new file mode 100644 index 0000000..5708b55 Binary files /dev/null and b/pytz/zoneinfo/America/Coral_Harbour differ diff --git a/pytz/zoneinfo/America/Cordoba b/pytz/zoneinfo/America/Cordoba new file mode 100644 index 0000000..cd97a24 Binary files /dev/null and b/pytz/zoneinfo/America/Cordoba differ diff --git a/pytz/zoneinfo/America/Costa_Rica b/pytz/zoneinfo/America/Costa_Rica new file mode 100644 index 0000000..c247133 Binary files /dev/null and b/pytz/zoneinfo/America/Costa_Rica differ diff --git a/pytz/zoneinfo/America/Creston b/pytz/zoneinfo/America/Creston new file mode 100644 index 0000000..798f627 Binary files /dev/null and b/pytz/zoneinfo/America/Creston differ diff --git a/pytz/zoneinfo/America/Cuiaba b/pytz/zoneinfo/America/Cuiaba new file mode 100644 index 0000000..e3aec8c Binary files /dev/null and b/pytz/zoneinfo/America/Cuiaba differ diff --git a/pytz/zoneinfo/America/Curacao b/pytz/zoneinfo/America/Curacao new file mode 100644 index 0000000..05e77ab Binary files /dev/null and b/pytz/zoneinfo/America/Curacao differ diff --git a/pytz/zoneinfo/America/Danmarkshavn b/pytz/zoneinfo/America/Danmarkshavn new file mode 100644 index 0000000..a8b58ad Binary files /dev/null and b/pytz/zoneinfo/America/Danmarkshavn differ diff --git a/pytz/zoneinfo/America/Dawson b/pytz/zoneinfo/America/Dawson new file mode 100644 index 0000000..61c9688 Binary files /dev/null and b/pytz/zoneinfo/America/Dawson differ diff --git a/pytz/zoneinfo/America/Dawson_Creek b/pytz/zoneinfo/America/Dawson_Creek new file mode 100644 index 0000000..78f9076 Binary files /dev/null and b/pytz/zoneinfo/America/Dawson_Creek differ diff --git a/pytz/zoneinfo/America/Denver b/pytz/zoneinfo/America/Denver new file mode 100644 index 0000000..7fc6691 Binary files /dev/null and b/pytz/zoneinfo/America/Denver differ diff --git a/pytz/zoneinfo/America/Detroit b/pytz/zoneinfo/America/Detroit new file mode 100644 index 0000000..a123b33 Binary files /dev/null and b/pytz/zoneinfo/America/Detroit differ diff --git a/pytz/zoneinfo/America/Dominica b/pytz/zoneinfo/America/Dominica new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Dominica differ diff --git a/pytz/zoneinfo/America/Edmonton b/pytz/zoneinfo/America/Edmonton new file mode 100644 index 0000000..d02fbcd Binary files /dev/null and b/pytz/zoneinfo/America/Edmonton differ diff --git a/pytz/zoneinfo/America/Eirunepe b/pytz/zoneinfo/America/Eirunepe new file mode 100644 index 0000000..3359731 Binary files /dev/null and b/pytz/zoneinfo/America/Eirunepe differ diff --git a/pytz/zoneinfo/America/El_Salvador b/pytz/zoneinfo/America/El_Salvador new file mode 100644 index 0000000..9b8bc7a Binary files /dev/null and b/pytz/zoneinfo/America/El_Salvador differ diff --git a/pytz/zoneinfo/America/Ensenada b/pytz/zoneinfo/America/Ensenada new file mode 100644 index 0000000..1387475 Binary files /dev/null and b/pytz/zoneinfo/America/Ensenada differ diff --git a/pytz/zoneinfo/America/Fort_Wayne b/pytz/zoneinfo/America/Fort_Wayne new file mode 100644 index 0000000..4a92c06 Binary files /dev/null and b/pytz/zoneinfo/America/Fort_Wayne differ diff --git a/pytz/zoneinfo/America/Fortaleza b/pytz/zoneinfo/America/Fortaleza new file mode 100644 index 0000000..c0bcf4d Binary files /dev/null and b/pytz/zoneinfo/America/Fortaleza differ diff --git a/pytz/zoneinfo/America/Glace_Bay b/pytz/zoneinfo/America/Glace_Bay new file mode 100644 index 0000000..f58522b Binary files /dev/null and b/pytz/zoneinfo/America/Glace_Bay differ diff --git a/pytz/zoneinfo/America/Godthab b/pytz/zoneinfo/America/Godthab new file mode 100644 index 0000000..111d9a8 Binary files /dev/null and b/pytz/zoneinfo/America/Godthab differ diff --git a/pytz/zoneinfo/America/Goose_Bay b/pytz/zoneinfo/America/Goose_Bay new file mode 100644 index 0000000..b4b945e Binary files /dev/null and b/pytz/zoneinfo/America/Goose_Bay differ diff --git a/pytz/zoneinfo/America/Grand_Turk b/pytz/zoneinfo/America/Grand_Turk new file mode 100644 index 0000000..331aeac Binary files /dev/null and b/pytz/zoneinfo/America/Grand_Turk differ diff --git a/pytz/zoneinfo/America/Grenada b/pytz/zoneinfo/America/Grenada new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Grenada differ diff --git a/pytz/zoneinfo/America/Guadeloupe b/pytz/zoneinfo/America/Guadeloupe new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Guadeloupe differ diff --git a/pytz/zoneinfo/America/Guatemala b/pytz/zoneinfo/America/Guatemala new file mode 100644 index 0000000..abf943b Binary files /dev/null and b/pytz/zoneinfo/America/Guatemala differ diff --git a/pytz/zoneinfo/America/Guayaquil b/pytz/zoneinfo/America/Guayaquil new file mode 100644 index 0000000..0828904 Binary files /dev/null and b/pytz/zoneinfo/America/Guayaquil differ diff --git a/pytz/zoneinfo/America/Guyana b/pytz/zoneinfo/America/Guyana new file mode 100644 index 0000000..036dbe0 Binary files /dev/null and b/pytz/zoneinfo/America/Guyana differ diff --git a/pytz/zoneinfo/America/Halifax b/pytz/zoneinfo/America/Halifax new file mode 100644 index 0000000..f86ece4 Binary files /dev/null and b/pytz/zoneinfo/America/Halifax differ diff --git a/pytz/zoneinfo/America/Havana b/pytz/zoneinfo/America/Havana new file mode 100644 index 0000000..1a58fcd Binary files /dev/null and b/pytz/zoneinfo/America/Havana differ diff --git a/pytz/zoneinfo/America/Hermosillo b/pytz/zoneinfo/America/Hermosillo new file mode 100644 index 0000000..ec435c2 Binary files /dev/null and b/pytz/zoneinfo/America/Hermosillo differ diff --git a/pytz/zoneinfo/America/Indiana/Indianapolis b/pytz/zoneinfo/America/Indiana/Indianapolis new file mode 100644 index 0000000..4a92c06 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Indianapolis differ diff --git a/pytz/zoneinfo/America/Indiana/Knox b/pytz/zoneinfo/America/Indiana/Knox new file mode 100644 index 0000000..cc785da Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Knox differ diff --git a/pytz/zoneinfo/America/Indiana/Marengo b/pytz/zoneinfo/America/Indiana/Marengo new file mode 100644 index 0000000..a23d7b7 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Marengo differ diff --git a/pytz/zoneinfo/America/Indiana/Petersburg b/pytz/zoneinfo/America/Indiana/Petersburg new file mode 100644 index 0000000..f16cb30 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Petersburg differ diff --git a/pytz/zoneinfo/America/Indiana/Tell_City b/pytz/zoneinfo/America/Indiana/Tell_City new file mode 100644 index 0000000..0250bf9 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Tell_City differ diff --git a/pytz/zoneinfo/America/Indiana/Vevay b/pytz/zoneinfo/America/Indiana/Vevay new file mode 100644 index 0000000..e934de6 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Vevay differ diff --git a/pytz/zoneinfo/America/Indiana/Vincennes b/pytz/zoneinfo/America/Indiana/Vincennes new file mode 100644 index 0000000..adbdbee Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Vincennes differ diff --git a/pytz/zoneinfo/America/Indiana/Winamac b/pytz/zoneinfo/America/Indiana/Winamac new file mode 100644 index 0000000..b34f7b2 Binary files /dev/null and b/pytz/zoneinfo/America/Indiana/Winamac differ diff --git a/pytz/zoneinfo/America/Indianapolis b/pytz/zoneinfo/America/Indianapolis new file mode 100644 index 0000000..4a92c06 Binary files /dev/null and b/pytz/zoneinfo/America/Indianapolis differ diff --git a/pytz/zoneinfo/America/Inuvik b/pytz/zoneinfo/America/Inuvik new file mode 100644 index 0000000..077fad4 Binary files /dev/null and b/pytz/zoneinfo/America/Inuvik differ diff --git a/pytz/zoneinfo/America/Iqaluit b/pytz/zoneinfo/America/Iqaluit new file mode 100644 index 0000000..e67b71f Binary files /dev/null and b/pytz/zoneinfo/America/Iqaluit differ diff --git a/pytz/zoneinfo/America/Jamaica b/pytz/zoneinfo/America/Jamaica new file mode 100644 index 0000000..006689b Binary files /dev/null and b/pytz/zoneinfo/America/Jamaica differ diff --git a/pytz/zoneinfo/America/Jujuy b/pytz/zoneinfo/America/Jujuy new file mode 100644 index 0000000..7be3eeb Binary files /dev/null and b/pytz/zoneinfo/America/Jujuy differ diff --git a/pytz/zoneinfo/America/Juneau b/pytz/zoneinfo/America/Juneau new file mode 100644 index 0000000..ade50a8 Binary files /dev/null and b/pytz/zoneinfo/America/Juneau differ diff --git a/pytz/zoneinfo/America/Kentucky/Louisville b/pytz/zoneinfo/America/Kentucky/Louisville new file mode 100644 index 0000000..fdf2e88 Binary files /dev/null and b/pytz/zoneinfo/America/Kentucky/Louisville differ diff --git a/pytz/zoneinfo/America/Kentucky/Monticello b/pytz/zoneinfo/America/Kentucky/Monticello new file mode 100644 index 0000000..60991aa Binary files /dev/null and b/pytz/zoneinfo/America/Kentucky/Monticello differ diff --git a/pytz/zoneinfo/America/Knox_IN b/pytz/zoneinfo/America/Knox_IN new file mode 100644 index 0000000..cc785da Binary files /dev/null and b/pytz/zoneinfo/America/Knox_IN differ diff --git a/pytz/zoneinfo/America/Kralendijk b/pytz/zoneinfo/America/Kralendijk new file mode 100644 index 0000000..05e77ab Binary files /dev/null and b/pytz/zoneinfo/America/Kralendijk differ diff --git a/pytz/zoneinfo/America/La_Paz b/pytz/zoneinfo/America/La_Paz new file mode 100644 index 0000000..cedf0b3 Binary files /dev/null and b/pytz/zoneinfo/America/La_Paz differ diff --git a/pytz/zoneinfo/America/Lima b/pytz/zoneinfo/America/Lima new file mode 100644 index 0000000..789fa5c Binary files /dev/null and b/pytz/zoneinfo/America/Lima differ diff --git a/pytz/zoneinfo/America/Los_Angeles b/pytz/zoneinfo/America/Los_Angeles new file mode 100644 index 0000000..1fa9149 Binary files /dev/null and b/pytz/zoneinfo/America/Los_Angeles differ diff --git a/pytz/zoneinfo/America/Louisville b/pytz/zoneinfo/America/Louisville new file mode 100644 index 0000000..fdf2e88 Binary files /dev/null and b/pytz/zoneinfo/America/Louisville differ diff --git a/pytz/zoneinfo/America/Lower_Princes b/pytz/zoneinfo/America/Lower_Princes new file mode 100644 index 0000000..05e77ab Binary files /dev/null and b/pytz/zoneinfo/America/Lower_Princes differ diff --git a/pytz/zoneinfo/America/Maceio b/pytz/zoneinfo/America/Maceio new file mode 100644 index 0000000..de74990 Binary files /dev/null and b/pytz/zoneinfo/America/Maceio differ diff --git a/pytz/zoneinfo/America/Managua b/pytz/zoneinfo/America/Managua new file mode 100644 index 0000000..c543ffd Binary files /dev/null and b/pytz/zoneinfo/America/Managua differ diff --git a/pytz/zoneinfo/America/Manaus b/pytz/zoneinfo/America/Manaus new file mode 100644 index 0000000..e0222f1 Binary files /dev/null and b/pytz/zoneinfo/America/Manaus differ diff --git a/pytz/zoneinfo/America/Marigot b/pytz/zoneinfo/America/Marigot new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Marigot differ diff --git a/pytz/zoneinfo/America/Martinique b/pytz/zoneinfo/America/Martinique new file mode 100644 index 0000000..f9e2399 Binary files /dev/null and b/pytz/zoneinfo/America/Martinique differ diff --git a/pytz/zoneinfo/America/Matamoros b/pytz/zoneinfo/America/Matamoros new file mode 100644 index 0000000..5671d25 Binary files /dev/null and b/pytz/zoneinfo/America/Matamoros differ diff --git a/pytz/zoneinfo/America/Mazatlan b/pytz/zoneinfo/America/Mazatlan new file mode 100644 index 0000000..afa94c2 Binary files /dev/null and b/pytz/zoneinfo/America/Mazatlan differ diff --git a/pytz/zoneinfo/America/Mendoza b/pytz/zoneinfo/America/Mendoza new file mode 100644 index 0000000..f9eb526 Binary files /dev/null and b/pytz/zoneinfo/America/Mendoza differ diff --git a/pytz/zoneinfo/America/Menominee b/pytz/zoneinfo/America/Menominee new file mode 100644 index 0000000..55d6e32 Binary files /dev/null and b/pytz/zoneinfo/America/Menominee differ diff --git a/pytz/zoneinfo/America/Merida b/pytz/zoneinfo/America/Merida new file mode 100644 index 0000000..ecc1856 Binary files /dev/null and b/pytz/zoneinfo/America/Merida differ diff --git a/pytz/zoneinfo/America/Metlakatla b/pytz/zoneinfo/America/Metlakatla new file mode 100644 index 0000000..e66cc34 Binary files /dev/null and b/pytz/zoneinfo/America/Metlakatla differ diff --git a/pytz/zoneinfo/America/Mexico_City b/pytz/zoneinfo/America/Mexico_City new file mode 100644 index 0000000..f11e3d2 Binary files /dev/null and b/pytz/zoneinfo/America/Mexico_City differ diff --git a/pytz/zoneinfo/America/Miquelon b/pytz/zoneinfo/America/Miquelon new file mode 100644 index 0000000..36f6696 Binary files /dev/null and b/pytz/zoneinfo/America/Miquelon differ diff --git a/pytz/zoneinfo/America/Moncton b/pytz/zoneinfo/America/Moncton new file mode 100644 index 0000000..51cb1ba Binary files /dev/null and b/pytz/zoneinfo/America/Moncton differ diff --git a/pytz/zoneinfo/America/Monterrey b/pytz/zoneinfo/America/Monterrey new file mode 100644 index 0000000..dcac92b Binary files /dev/null and b/pytz/zoneinfo/America/Monterrey differ diff --git a/pytz/zoneinfo/America/Montevideo b/pytz/zoneinfo/America/Montevideo new file mode 100644 index 0000000..ab3d680 Binary files /dev/null and b/pytz/zoneinfo/America/Montevideo differ diff --git a/pytz/zoneinfo/America/Montreal b/pytz/zoneinfo/America/Montreal new file mode 100644 index 0000000..89b9f49 Binary files /dev/null and b/pytz/zoneinfo/America/Montreal differ diff --git a/pytz/zoneinfo/America/Montserrat b/pytz/zoneinfo/America/Montserrat new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Montserrat differ diff --git a/pytz/zoneinfo/America/Nassau b/pytz/zoneinfo/America/Nassau new file mode 100644 index 0000000..e5d0289 Binary files /dev/null and b/pytz/zoneinfo/America/Nassau differ diff --git a/pytz/zoneinfo/America/New_York b/pytz/zoneinfo/America/New_York new file mode 100644 index 0000000..7553fee Binary files /dev/null and b/pytz/zoneinfo/America/New_York differ diff --git a/pytz/zoneinfo/America/Nipigon b/pytz/zoneinfo/America/Nipigon new file mode 100644 index 0000000..f8a0292 Binary files /dev/null and b/pytz/zoneinfo/America/Nipigon differ diff --git a/pytz/zoneinfo/America/Nome b/pytz/zoneinfo/America/Nome new file mode 100644 index 0000000..d370ab1 Binary files /dev/null and b/pytz/zoneinfo/America/Nome differ diff --git a/pytz/zoneinfo/America/Noronha b/pytz/zoneinfo/America/Noronha new file mode 100644 index 0000000..774b14e Binary files /dev/null and b/pytz/zoneinfo/America/Noronha differ diff --git a/pytz/zoneinfo/America/North_Dakota/Beulah b/pytz/zoneinfo/America/North_Dakota/Beulah new file mode 100644 index 0000000..8174c88 Binary files /dev/null and b/pytz/zoneinfo/America/North_Dakota/Beulah differ diff --git a/pytz/zoneinfo/America/North_Dakota/Center b/pytz/zoneinfo/America/North_Dakota/Center new file mode 100644 index 0000000..8035b24 Binary files /dev/null and b/pytz/zoneinfo/America/North_Dakota/Center 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 Binary files /dev/null and b/pytz/zoneinfo/America/North_Dakota/New_Salem differ diff --git a/pytz/zoneinfo/America/Ojinaga b/pytz/zoneinfo/America/Ojinaga new file mode 100644 index 0000000..190c5c8 Binary files /dev/null and b/pytz/zoneinfo/America/Ojinaga differ diff --git a/pytz/zoneinfo/America/Panama b/pytz/zoneinfo/America/Panama new file mode 100644 index 0000000..5c1c063 Binary files /dev/null and b/pytz/zoneinfo/America/Panama differ diff --git a/pytz/zoneinfo/America/Pangnirtung b/pytz/zoneinfo/America/Pangnirtung new file mode 100644 index 0000000..994da43 Binary files /dev/null and b/pytz/zoneinfo/America/Pangnirtung differ diff --git a/pytz/zoneinfo/America/Paramaribo b/pytz/zoneinfo/America/Paramaribo new file mode 100644 index 0000000..2f05b23 Binary files /dev/null and b/pytz/zoneinfo/America/Paramaribo differ diff --git a/pytz/zoneinfo/America/Phoenix b/pytz/zoneinfo/America/Phoenix new file mode 100644 index 0000000..adf2823 Binary files /dev/null and b/pytz/zoneinfo/America/Phoenix differ diff --git a/pytz/zoneinfo/America/Port-au-Prince b/pytz/zoneinfo/America/Port-au-Prince new file mode 100644 index 0000000..dd8895c Binary files /dev/null and b/pytz/zoneinfo/America/Port-au-Prince differ diff --git a/pytz/zoneinfo/America/Port_of_Spain b/pytz/zoneinfo/America/Port_of_Spain new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Port_of_Spain differ diff --git a/pytz/zoneinfo/America/Porto_Acre b/pytz/zoneinfo/America/Porto_Acre new file mode 100644 index 0000000..788d0e9 Binary files /dev/null and b/pytz/zoneinfo/America/Porto_Acre differ diff --git a/pytz/zoneinfo/America/Porto_Velho b/pytz/zoneinfo/America/Porto_Velho new file mode 100644 index 0000000..aa8cf31 Binary files /dev/null and b/pytz/zoneinfo/America/Porto_Velho differ diff --git a/pytz/zoneinfo/America/Puerto_Rico b/pytz/zoneinfo/America/Puerto_Rico new file mode 100644 index 0000000..d4525a6 Binary files /dev/null and b/pytz/zoneinfo/America/Puerto_Rico differ diff --git a/pytz/zoneinfo/America/Rainy_River b/pytz/zoneinfo/America/Rainy_River new file mode 100644 index 0000000..70dcd2d Binary files /dev/null and b/pytz/zoneinfo/America/Rainy_River differ diff --git a/pytz/zoneinfo/America/Rankin_Inlet b/pytz/zoneinfo/America/Rankin_Inlet new file mode 100644 index 0000000..cc15d83 Binary files /dev/null and b/pytz/zoneinfo/America/Rankin_Inlet differ diff --git a/pytz/zoneinfo/America/Recife b/pytz/zoneinfo/America/Recife new file mode 100644 index 0000000..f0ad7b9 Binary files /dev/null and b/pytz/zoneinfo/America/Recife differ diff --git a/pytz/zoneinfo/America/Regina b/pytz/zoneinfo/America/Regina new file mode 100644 index 0000000..5fe8d6b Binary files /dev/null and b/pytz/zoneinfo/America/Regina differ diff --git a/pytz/zoneinfo/America/Resolute b/pytz/zoneinfo/America/Resolute new file mode 100644 index 0000000..5307941 Binary files /dev/null and b/pytz/zoneinfo/America/Resolute differ diff --git a/pytz/zoneinfo/America/Rio_Branco b/pytz/zoneinfo/America/Rio_Branco new file mode 100644 index 0000000..788d0e9 Binary files /dev/null and b/pytz/zoneinfo/America/Rio_Branco differ diff --git a/pytz/zoneinfo/America/Rosario b/pytz/zoneinfo/America/Rosario new file mode 100644 index 0000000..cd97a24 Binary files /dev/null and b/pytz/zoneinfo/America/Rosario differ diff --git a/pytz/zoneinfo/America/Santa_Isabel b/pytz/zoneinfo/America/Santa_Isabel new file mode 100644 index 0000000..e1c4d16 Binary files /dev/null and b/pytz/zoneinfo/America/Santa_Isabel differ diff --git a/pytz/zoneinfo/America/Santarem b/pytz/zoneinfo/America/Santarem new file mode 100644 index 0000000..bb469d3 Binary files /dev/null and b/pytz/zoneinfo/America/Santarem differ diff --git a/pytz/zoneinfo/America/Santiago b/pytz/zoneinfo/America/Santiago new file mode 100644 index 0000000..92cf559 Binary files /dev/null and b/pytz/zoneinfo/America/Santiago differ diff --git a/pytz/zoneinfo/America/Santo_Domingo b/pytz/zoneinfo/America/Santo_Domingo new file mode 100644 index 0000000..77eab31 Binary files /dev/null and b/pytz/zoneinfo/America/Santo_Domingo differ diff --git a/pytz/zoneinfo/America/Sao_Paulo b/pytz/zoneinfo/America/Sao_Paulo new file mode 100644 index 0000000..552ce7c Binary files /dev/null and b/pytz/zoneinfo/America/Sao_Paulo differ diff --git a/pytz/zoneinfo/America/Scoresbysund b/pytz/zoneinfo/America/Scoresbysund new file mode 100644 index 0000000..85676ca Binary files /dev/null and b/pytz/zoneinfo/America/Scoresbysund differ diff --git a/pytz/zoneinfo/America/Shiprock b/pytz/zoneinfo/America/Shiprock new file mode 100644 index 0000000..7fc6691 Binary files /dev/null and b/pytz/zoneinfo/America/Shiprock differ diff --git a/pytz/zoneinfo/America/Sitka b/pytz/zoneinfo/America/Sitka new file mode 100644 index 0000000..48fc6af Binary files /dev/null and b/pytz/zoneinfo/America/Sitka differ diff --git a/pytz/zoneinfo/America/St_Barthelemy b/pytz/zoneinfo/America/St_Barthelemy new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/St_Barthelemy differ diff --git a/pytz/zoneinfo/America/St_Johns b/pytz/zoneinfo/America/St_Johns new file mode 100644 index 0000000..a1d1485 Binary files /dev/null and b/pytz/zoneinfo/America/St_Johns differ diff --git a/pytz/zoneinfo/America/St_Kitts b/pytz/zoneinfo/America/St_Kitts new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/St_Kitts differ diff --git a/pytz/zoneinfo/America/St_Lucia b/pytz/zoneinfo/America/St_Lucia new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/St_Lucia differ diff --git a/pytz/zoneinfo/America/St_Thomas b/pytz/zoneinfo/America/St_Thomas new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/St_Thomas differ diff --git a/pytz/zoneinfo/America/St_Vincent b/pytz/zoneinfo/America/St_Vincent new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/St_Vincent differ diff --git a/pytz/zoneinfo/America/Swift_Current b/pytz/zoneinfo/America/Swift_Current new file mode 100644 index 0000000..4db1300 Binary files /dev/null and b/pytz/zoneinfo/America/Swift_Current differ diff --git a/pytz/zoneinfo/America/Tegucigalpa b/pytz/zoneinfo/America/Tegucigalpa new file mode 100644 index 0000000..7aea8f9 Binary files /dev/null and b/pytz/zoneinfo/America/Tegucigalpa differ diff --git a/pytz/zoneinfo/America/Thule b/pytz/zoneinfo/America/Thule new file mode 100644 index 0000000..deefcc8 Binary files /dev/null and b/pytz/zoneinfo/America/Thule differ diff --git a/pytz/zoneinfo/America/Thunder_Bay b/pytz/zoneinfo/America/Thunder_Bay new file mode 100644 index 0000000..aa1d486 Binary files /dev/null and b/pytz/zoneinfo/America/Thunder_Bay differ diff --git a/pytz/zoneinfo/America/Tijuana b/pytz/zoneinfo/America/Tijuana new file mode 100644 index 0000000..1387475 Binary files /dev/null and b/pytz/zoneinfo/America/Tijuana differ diff --git a/pytz/zoneinfo/America/Toronto b/pytz/zoneinfo/America/Toronto new file mode 100644 index 0000000..7b4682a Binary files /dev/null and b/pytz/zoneinfo/America/Toronto differ diff --git a/pytz/zoneinfo/America/Tortola b/pytz/zoneinfo/America/Tortola new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Tortola differ diff --git a/pytz/zoneinfo/America/Vancouver b/pytz/zoneinfo/America/Vancouver new file mode 100644 index 0000000..9b5d924 Binary files /dev/null and b/pytz/zoneinfo/America/Vancouver differ diff --git a/pytz/zoneinfo/America/Virgin b/pytz/zoneinfo/America/Virgin new file mode 100644 index 0000000..447efbe Binary files /dev/null and b/pytz/zoneinfo/America/Virgin differ diff --git a/pytz/zoneinfo/America/Whitehorse b/pytz/zoneinfo/America/Whitehorse new file mode 100644 index 0000000..8604c5c Binary files /dev/null and b/pytz/zoneinfo/America/Whitehorse differ diff --git a/pytz/zoneinfo/America/Winnipeg b/pytz/zoneinfo/America/Winnipeg new file mode 100644 index 0000000..2ffe3d8 Binary files /dev/null and b/pytz/zoneinfo/America/Winnipeg differ diff --git a/pytz/zoneinfo/America/Yakutat b/pytz/zoneinfo/America/Yakutat new file mode 100644 index 0000000..f3d7399 Binary files /dev/null and b/pytz/zoneinfo/America/Yakutat differ diff --git a/pytz/zoneinfo/America/Yellowknife b/pytz/zoneinfo/America/Yellowknife new file mode 100644 index 0000000..21cba6e Binary files /dev/null and b/pytz/zoneinfo/America/Yellowknife differ diff --git a/pytz/zoneinfo/Antarctica/Casey b/pytz/zoneinfo/Antarctica/Casey new file mode 100644 index 0000000..c2a9905 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Casey differ diff --git a/pytz/zoneinfo/Antarctica/Davis b/pytz/zoneinfo/Antarctica/Davis new file mode 100644 index 0000000..7321c67 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Davis differ diff --git a/pytz/zoneinfo/Antarctica/DumontDUrville b/pytz/zoneinfo/Antarctica/DumontDUrville new file mode 100644 index 0000000..c406b8d Binary files /dev/null and b/pytz/zoneinfo/Antarctica/DumontDUrville differ diff --git a/pytz/zoneinfo/Antarctica/Macquarie b/pytz/zoneinfo/Antarctica/Macquarie new file mode 100644 index 0000000..fc7b96f Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Macquarie differ diff --git a/pytz/zoneinfo/Antarctica/Mawson b/pytz/zoneinfo/Antarctica/Mawson new file mode 100644 index 0000000..6c5b0fa Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Mawson differ diff --git a/pytz/zoneinfo/Antarctica/McMurdo b/pytz/zoneinfo/Antarctica/McMurdo new file mode 100644 index 0000000..a5f5b6d Binary files /dev/null and b/pytz/zoneinfo/Antarctica/McMurdo differ diff --git a/pytz/zoneinfo/Antarctica/Palmer b/pytz/zoneinfo/Antarctica/Palmer new file mode 100644 index 0000000..9e9cdd0 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Palmer differ diff --git a/pytz/zoneinfo/Antarctica/Rothera b/pytz/zoneinfo/Antarctica/Rothera new file mode 100644 index 0000000..28f82ba Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Rothera differ diff --git a/pytz/zoneinfo/Antarctica/South_Pole b/pytz/zoneinfo/Antarctica/South_Pole new file mode 100644 index 0000000..a5f5b6d Binary files /dev/null and b/pytz/zoneinfo/Antarctica/South_Pole differ diff --git a/pytz/zoneinfo/Antarctica/Syowa b/pytz/zoneinfo/Antarctica/Syowa new file mode 100644 index 0000000..b837b07 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Syowa differ diff --git a/pytz/zoneinfo/Antarctica/Troll b/pytz/zoneinfo/Antarctica/Troll new file mode 100644 index 0000000..d973a12 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Troll differ diff --git a/pytz/zoneinfo/Antarctica/Vostok b/pytz/zoneinfo/Antarctica/Vostok new file mode 100644 index 0000000..cbec909 Binary files /dev/null and b/pytz/zoneinfo/Antarctica/Vostok differ diff --git a/pytz/zoneinfo/Arctic/Longyearbyen b/pytz/zoneinfo/Arctic/Longyearbyen new file mode 100644 index 0000000..239c017 Binary files /dev/null and b/pytz/zoneinfo/Arctic/Longyearbyen differ diff --git a/pytz/zoneinfo/Asia/Aden b/pytz/zoneinfo/Asia/Aden new file mode 100644 index 0000000..505e1d2 Binary files /dev/null and b/pytz/zoneinfo/Asia/Aden differ diff --git a/pytz/zoneinfo/Asia/Almaty b/pytz/zoneinfo/Asia/Almaty new file mode 100644 index 0000000..75a007d Binary files /dev/null and b/pytz/zoneinfo/Asia/Almaty differ diff --git a/pytz/zoneinfo/Asia/Amman b/pytz/zoneinfo/Asia/Amman new file mode 100644 index 0000000..c3f0994 Binary files /dev/null and b/pytz/zoneinfo/Asia/Amman differ diff --git a/pytz/zoneinfo/Asia/Anadyr b/pytz/zoneinfo/Asia/Anadyr new file mode 100644 index 0000000..766594b Binary files /dev/null and b/pytz/zoneinfo/Asia/Anadyr differ diff --git a/pytz/zoneinfo/Asia/Aqtau b/pytz/zoneinfo/Asia/Aqtau new file mode 100644 index 0000000..811ed2f Binary files /dev/null and b/pytz/zoneinfo/Asia/Aqtau differ diff --git a/pytz/zoneinfo/Asia/Aqtobe b/pytz/zoneinfo/Asia/Aqtobe new file mode 100644 index 0000000..ff3b96b Binary files /dev/null and b/pytz/zoneinfo/Asia/Aqtobe differ diff --git a/pytz/zoneinfo/Asia/Ashgabat b/pytz/zoneinfo/Asia/Ashgabat new file mode 100644 index 0000000..f79fe04 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ashgabat differ diff --git a/pytz/zoneinfo/Asia/Ashkhabad b/pytz/zoneinfo/Asia/Ashkhabad new file mode 100644 index 0000000..f79fe04 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ashkhabad differ diff --git a/pytz/zoneinfo/Asia/Baghdad b/pytz/zoneinfo/Asia/Baghdad new file mode 100644 index 0000000..f0a96ec Binary files /dev/null and b/pytz/zoneinfo/Asia/Baghdad differ diff --git a/pytz/zoneinfo/Asia/Bahrain b/pytz/zoneinfo/Asia/Bahrain new file mode 100644 index 0000000..cda04a1 Binary files /dev/null and b/pytz/zoneinfo/Asia/Bahrain differ diff --git a/pytz/zoneinfo/Asia/Baku b/pytz/zoneinfo/Asia/Baku new file mode 100644 index 0000000..f78e764 Binary files /dev/null and b/pytz/zoneinfo/Asia/Baku differ diff --git a/pytz/zoneinfo/Asia/Bangkok b/pytz/zoneinfo/Asia/Bangkok new file mode 100644 index 0000000..e8e7627 Binary files /dev/null and b/pytz/zoneinfo/Asia/Bangkok differ diff --git a/pytz/zoneinfo/Asia/Beirut b/pytz/zoneinfo/Asia/Beirut new file mode 100644 index 0000000..72f0896 Binary files /dev/null and b/pytz/zoneinfo/Asia/Beirut differ diff --git a/pytz/zoneinfo/Asia/Bishkek b/pytz/zoneinfo/Asia/Bishkek new file mode 100644 index 0000000..eee8278 Binary files /dev/null and b/pytz/zoneinfo/Asia/Bishkek differ diff --git a/pytz/zoneinfo/Asia/Brunei b/pytz/zoneinfo/Asia/Brunei new file mode 100644 index 0000000..1ac3115 Binary files /dev/null and b/pytz/zoneinfo/Asia/Brunei differ diff --git a/pytz/zoneinfo/Asia/Calcutta b/pytz/zoneinfo/Asia/Calcutta new file mode 100644 index 0000000..3c0d5ab Binary files /dev/null and b/pytz/zoneinfo/Asia/Calcutta differ diff --git a/pytz/zoneinfo/Asia/Chita b/pytz/zoneinfo/Asia/Chita new file mode 100644 index 0000000..c090654 Binary files /dev/null and b/pytz/zoneinfo/Asia/Chita differ diff --git a/pytz/zoneinfo/Asia/Choibalsan b/pytz/zoneinfo/Asia/Choibalsan new file mode 100644 index 0000000..f099092 Binary files /dev/null and b/pytz/zoneinfo/Asia/Choibalsan differ diff --git a/pytz/zoneinfo/Asia/Chongqing b/pytz/zoneinfo/Asia/Chongqing new file mode 100644 index 0000000..dbd132f Binary files /dev/null and b/pytz/zoneinfo/Asia/Chongqing differ diff --git a/pytz/zoneinfo/Asia/Chungking b/pytz/zoneinfo/Asia/Chungking new file mode 100644 index 0000000..dbd132f Binary files /dev/null and b/pytz/zoneinfo/Asia/Chungking differ diff --git a/pytz/zoneinfo/Asia/Colombo b/pytz/zoneinfo/Asia/Colombo new file mode 100644 index 0000000..d10439a Binary files /dev/null and b/pytz/zoneinfo/Asia/Colombo differ diff --git a/pytz/zoneinfo/Asia/Dacca b/pytz/zoneinfo/Asia/Dacca new file mode 100644 index 0000000..b6b326b Binary files /dev/null and b/pytz/zoneinfo/Asia/Dacca differ diff --git a/pytz/zoneinfo/Asia/Damascus b/pytz/zoneinfo/Asia/Damascus new file mode 100644 index 0000000..ac45764 Binary files /dev/null and b/pytz/zoneinfo/Asia/Damascus differ diff --git a/pytz/zoneinfo/Asia/Dhaka b/pytz/zoneinfo/Asia/Dhaka new file mode 100644 index 0000000..b6b326b Binary files /dev/null and b/pytz/zoneinfo/Asia/Dhaka differ diff --git a/pytz/zoneinfo/Asia/Dili b/pytz/zoneinfo/Asia/Dili new file mode 100644 index 0000000..8124fb7 Binary files /dev/null and b/pytz/zoneinfo/Asia/Dili differ diff --git a/pytz/zoneinfo/Asia/Dubai b/pytz/zoneinfo/Asia/Dubai new file mode 100644 index 0000000..415e443 Binary files /dev/null and b/pytz/zoneinfo/Asia/Dubai differ diff --git a/pytz/zoneinfo/Asia/Dushanbe b/pytz/zoneinfo/Asia/Dushanbe new file mode 100644 index 0000000..3b1e978 Binary files /dev/null and b/pytz/zoneinfo/Asia/Dushanbe differ diff --git a/pytz/zoneinfo/Asia/Gaza b/pytz/zoneinfo/Asia/Gaza new file mode 100644 index 0000000..bd683e8 Binary files /dev/null and b/pytz/zoneinfo/Asia/Gaza differ diff --git a/pytz/zoneinfo/Asia/Harbin b/pytz/zoneinfo/Asia/Harbin new file mode 100644 index 0000000..dbd132f Binary files /dev/null and b/pytz/zoneinfo/Asia/Harbin differ diff --git a/pytz/zoneinfo/Asia/Hebron b/pytz/zoneinfo/Asia/Hebron new file mode 100644 index 0000000..0bc7674 Binary files /dev/null and b/pytz/zoneinfo/Asia/Hebron differ diff --git a/pytz/zoneinfo/Asia/Ho_Chi_Minh b/pytz/zoneinfo/Asia/Ho_Chi_Minh new file mode 100644 index 0000000..c142265 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ho_Chi_Minh differ diff --git a/pytz/zoneinfo/Asia/Hong_Kong b/pytz/zoneinfo/Asia/Hong_Kong new file mode 100644 index 0000000..dc9058e Binary files /dev/null and b/pytz/zoneinfo/Asia/Hong_Kong differ diff --git a/pytz/zoneinfo/Asia/Hovd b/pytz/zoneinfo/Asia/Hovd new file mode 100644 index 0000000..71c3cad Binary files /dev/null and b/pytz/zoneinfo/Asia/Hovd differ diff --git a/pytz/zoneinfo/Asia/Irkutsk b/pytz/zoneinfo/Asia/Irkutsk new file mode 100644 index 0000000..1e94a47 Binary files /dev/null and b/pytz/zoneinfo/Asia/Irkutsk differ diff --git a/pytz/zoneinfo/Asia/Istanbul b/pytz/zoneinfo/Asia/Istanbul new file mode 100644 index 0000000..d89aa3a Binary files /dev/null and b/pytz/zoneinfo/Asia/Istanbul differ diff --git a/pytz/zoneinfo/Asia/Jakarta b/pytz/zoneinfo/Asia/Jakarta new file mode 100644 index 0000000..3130bff Binary files /dev/null and b/pytz/zoneinfo/Asia/Jakarta differ diff --git a/pytz/zoneinfo/Asia/Jayapura b/pytz/zoneinfo/Asia/Jayapura new file mode 100644 index 0000000..a9d1217 Binary files /dev/null and b/pytz/zoneinfo/Asia/Jayapura differ diff --git a/pytz/zoneinfo/Asia/Jerusalem b/pytz/zoneinfo/Asia/Jerusalem new file mode 100644 index 0000000..df51199 Binary files /dev/null and b/pytz/zoneinfo/Asia/Jerusalem differ diff --git a/pytz/zoneinfo/Asia/Kabul b/pytz/zoneinfo/Asia/Kabul new file mode 100644 index 0000000..266cc7e Binary files /dev/null and b/pytz/zoneinfo/Asia/Kabul differ diff --git a/pytz/zoneinfo/Asia/Kamchatka b/pytz/zoneinfo/Asia/Kamchatka new file mode 100644 index 0000000..a0541cf Binary files /dev/null and b/pytz/zoneinfo/Asia/Kamchatka differ diff --git a/pytz/zoneinfo/Asia/Karachi b/pytz/zoneinfo/Asia/Karachi new file mode 100644 index 0000000..6a6de1b Binary files /dev/null and b/pytz/zoneinfo/Asia/Karachi differ diff --git a/pytz/zoneinfo/Asia/Kashgar b/pytz/zoneinfo/Asia/Kashgar new file mode 100644 index 0000000..964a5c2 Binary files /dev/null and b/pytz/zoneinfo/Asia/Kashgar differ diff --git a/pytz/zoneinfo/Asia/Kathmandu b/pytz/zoneinfo/Asia/Kathmandu new file mode 100644 index 0000000..2824709 Binary files /dev/null and b/pytz/zoneinfo/Asia/Kathmandu differ diff --git a/pytz/zoneinfo/Asia/Katmandu b/pytz/zoneinfo/Asia/Katmandu new file mode 100644 index 0000000..2824709 Binary files /dev/null and b/pytz/zoneinfo/Asia/Katmandu differ diff --git a/pytz/zoneinfo/Asia/Khandyga b/pytz/zoneinfo/Asia/Khandyga new file mode 100644 index 0000000..26becb3 Binary files /dev/null and b/pytz/zoneinfo/Asia/Khandyga differ diff --git a/pytz/zoneinfo/Asia/Kolkata b/pytz/zoneinfo/Asia/Kolkata new file mode 100644 index 0000000..3c0d5ab Binary files /dev/null and b/pytz/zoneinfo/Asia/Kolkata differ diff --git a/pytz/zoneinfo/Asia/Krasnoyarsk b/pytz/zoneinfo/Asia/Krasnoyarsk new file mode 100644 index 0000000..3107809 Binary files /dev/null and b/pytz/zoneinfo/Asia/Krasnoyarsk differ diff --git a/pytz/zoneinfo/Asia/Kuala_Lumpur b/pytz/zoneinfo/Asia/Kuala_Lumpur new file mode 100644 index 0000000..35b987d Binary files /dev/null and b/pytz/zoneinfo/Asia/Kuala_Lumpur differ diff --git a/pytz/zoneinfo/Asia/Kuching b/pytz/zoneinfo/Asia/Kuching new file mode 100644 index 0000000..4f891db Binary files /dev/null and b/pytz/zoneinfo/Asia/Kuching differ diff --git a/pytz/zoneinfo/Asia/Kuwait b/pytz/zoneinfo/Asia/Kuwait new file mode 100644 index 0000000..5623811 Binary files /dev/null and b/pytz/zoneinfo/Asia/Kuwait differ diff --git a/pytz/zoneinfo/Asia/Macao b/pytz/zoneinfo/Asia/Macao new file mode 100644 index 0000000..b8f9c36 Binary files /dev/null and b/pytz/zoneinfo/Asia/Macao differ diff --git a/pytz/zoneinfo/Asia/Macau b/pytz/zoneinfo/Asia/Macau new file mode 100644 index 0000000..b8f9c36 Binary files /dev/null and b/pytz/zoneinfo/Asia/Macau differ diff --git a/pytz/zoneinfo/Asia/Magadan b/pytz/zoneinfo/Asia/Magadan new file mode 100644 index 0000000..e09c4dc Binary files /dev/null and b/pytz/zoneinfo/Asia/Magadan differ diff --git a/pytz/zoneinfo/Asia/Makassar b/pytz/zoneinfo/Asia/Makassar new file mode 100644 index 0000000..0d68923 Binary files /dev/null and b/pytz/zoneinfo/Asia/Makassar differ diff --git a/pytz/zoneinfo/Asia/Manila b/pytz/zoneinfo/Asia/Manila new file mode 100644 index 0000000..ac0f3a6 Binary files /dev/null and b/pytz/zoneinfo/Asia/Manila differ diff --git a/pytz/zoneinfo/Asia/Muscat b/pytz/zoneinfo/Asia/Muscat new file mode 100644 index 0000000..53a2219 Binary files /dev/null and b/pytz/zoneinfo/Asia/Muscat differ diff --git a/pytz/zoneinfo/Asia/Nicosia b/pytz/zoneinfo/Asia/Nicosia new file mode 100644 index 0000000..3e663b2 Binary files /dev/null and b/pytz/zoneinfo/Asia/Nicosia differ diff --git a/pytz/zoneinfo/Asia/Novokuznetsk b/pytz/zoneinfo/Asia/Novokuznetsk new file mode 100644 index 0000000..1176866 Binary files /dev/null and b/pytz/zoneinfo/Asia/Novokuznetsk differ diff --git a/pytz/zoneinfo/Asia/Novosibirsk b/pytz/zoneinfo/Asia/Novosibirsk new file mode 100644 index 0000000..ed6d7dc Binary files /dev/null and b/pytz/zoneinfo/Asia/Novosibirsk differ diff --git a/pytz/zoneinfo/Asia/Omsk b/pytz/zoneinfo/Asia/Omsk new file mode 100644 index 0000000..760c391 Binary files /dev/null and b/pytz/zoneinfo/Asia/Omsk differ diff --git a/pytz/zoneinfo/Asia/Oral b/pytz/zoneinfo/Asia/Oral new file mode 100644 index 0000000..1467caf Binary files /dev/null and b/pytz/zoneinfo/Asia/Oral differ diff --git a/pytz/zoneinfo/Asia/Phnom_Penh b/pytz/zoneinfo/Asia/Phnom_Penh new file mode 100644 index 0000000..e8e7627 Binary files /dev/null and b/pytz/zoneinfo/Asia/Phnom_Penh differ diff --git a/pytz/zoneinfo/Asia/Pontianak b/pytz/zoneinfo/Asia/Pontianak new file mode 100644 index 0000000..dcd7014 Binary files /dev/null and b/pytz/zoneinfo/Asia/Pontianak differ diff --git a/pytz/zoneinfo/Asia/Pyongyang b/pytz/zoneinfo/Asia/Pyongyang new file mode 100644 index 0000000..b04bf74 Binary files /dev/null and b/pytz/zoneinfo/Asia/Pyongyang differ diff --git a/pytz/zoneinfo/Asia/Qatar b/pytz/zoneinfo/Asia/Qatar new file mode 100644 index 0000000..3e20373 Binary files /dev/null and b/pytz/zoneinfo/Asia/Qatar differ diff --git a/pytz/zoneinfo/Asia/Qyzylorda b/pytz/zoneinfo/Asia/Qyzylorda new file mode 100644 index 0000000..ce53516 Binary files /dev/null and b/pytz/zoneinfo/Asia/Qyzylorda differ diff --git a/pytz/zoneinfo/Asia/Rangoon b/pytz/zoneinfo/Asia/Rangoon new file mode 100644 index 0000000..934ca7e Binary files /dev/null and b/pytz/zoneinfo/Asia/Rangoon differ diff --git a/pytz/zoneinfo/Asia/Riyadh b/pytz/zoneinfo/Asia/Riyadh new file mode 100644 index 0000000..c35e42a Binary files /dev/null and b/pytz/zoneinfo/Asia/Riyadh differ diff --git a/pytz/zoneinfo/Asia/Saigon b/pytz/zoneinfo/Asia/Saigon new file mode 100644 index 0000000..c142265 Binary files /dev/null and b/pytz/zoneinfo/Asia/Saigon differ diff --git a/pytz/zoneinfo/Asia/Sakhalin b/pytz/zoneinfo/Asia/Sakhalin new file mode 100644 index 0000000..ec62afc Binary files /dev/null and b/pytz/zoneinfo/Asia/Sakhalin differ diff --git a/pytz/zoneinfo/Asia/Samarkand b/pytz/zoneinfo/Asia/Samarkand new file mode 100644 index 0000000..65fb5b0 Binary files /dev/null and b/pytz/zoneinfo/Asia/Samarkand differ diff --git a/pytz/zoneinfo/Asia/Seoul b/pytz/zoneinfo/Asia/Seoul new file mode 100644 index 0000000..fd91d5b Binary files /dev/null and b/pytz/zoneinfo/Asia/Seoul differ diff --git a/pytz/zoneinfo/Asia/Shanghai b/pytz/zoneinfo/Asia/Shanghai new file mode 100644 index 0000000..dbd132f Binary files /dev/null and b/pytz/zoneinfo/Asia/Shanghai differ diff --git a/pytz/zoneinfo/Asia/Singapore b/pytz/zoneinfo/Asia/Singapore new file mode 100644 index 0000000..9dd49cb Binary files /dev/null and b/pytz/zoneinfo/Asia/Singapore differ diff --git a/pytz/zoneinfo/Asia/Srednekolymsk b/pytz/zoneinfo/Asia/Srednekolymsk new file mode 100644 index 0000000..0929f66 Binary files /dev/null and b/pytz/zoneinfo/Asia/Srednekolymsk differ diff --git a/pytz/zoneinfo/Asia/Taipei b/pytz/zoneinfo/Asia/Taipei new file mode 100644 index 0000000..4810a0b Binary files /dev/null and b/pytz/zoneinfo/Asia/Taipei differ diff --git a/pytz/zoneinfo/Asia/Tashkent b/pytz/zoneinfo/Asia/Tashkent new file mode 100644 index 0000000..1f59faa Binary files /dev/null and b/pytz/zoneinfo/Asia/Tashkent differ diff --git a/pytz/zoneinfo/Asia/Tbilisi b/pytz/zoneinfo/Asia/Tbilisi new file mode 100644 index 0000000..0d7081e Binary files /dev/null and b/pytz/zoneinfo/Asia/Tbilisi differ diff --git a/pytz/zoneinfo/Asia/Tehran b/pytz/zoneinfo/Asia/Tehran new file mode 100644 index 0000000..8710781 Binary files /dev/null and b/pytz/zoneinfo/Asia/Tehran differ diff --git a/pytz/zoneinfo/Asia/Tel_Aviv b/pytz/zoneinfo/Asia/Tel_Aviv new file mode 100644 index 0000000..df51199 Binary files /dev/null and b/pytz/zoneinfo/Asia/Tel_Aviv differ diff --git a/pytz/zoneinfo/Asia/Thimbu b/pytz/zoneinfo/Asia/Thimbu new file mode 100644 index 0000000..0bd94cb Binary files /dev/null and b/pytz/zoneinfo/Asia/Thimbu differ diff --git a/pytz/zoneinfo/Asia/Thimphu b/pytz/zoneinfo/Asia/Thimphu new file mode 100644 index 0000000..0bd94cb Binary files /dev/null and b/pytz/zoneinfo/Asia/Thimphu differ diff --git a/pytz/zoneinfo/Asia/Tokyo b/pytz/zoneinfo/Asia/Tokyo new file mode 100644 index 0000000..0244140 Binary files /dev/null and b/pytz/zoneinfo/Asia/Tokyo differ diff --git a/pytz/zoneinfo/Asia/Ujung_Pandang b/pytz/zoneinfo/Asia/Ujung_Pandang new file mode 100644 index 0000000..0d68923 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ujung_Pandang differ diff --git a/pytz/zoneinfo/Asia/Ulaanbaatar b/pytz/zoneinfo/Asia/Ulaanbaatar new file mode 100644 index 0000000..61505e9 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ulaanbaatar differ diff --git a/pytz/zoneinfo/Asia/Ulan_Bator b/pytz/zoneinfo/Asia/Ulan_Bator new file mode 100644 index 0000000..61505e9 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ulan_Bator differ diff --git a/pytz/zoneinfo/Asia/Urumqi b/pytz/zoneinfo/Asia/Urumqi new file mode 100644 index 0000000..964a5c2 Binary files /dev/null and b/pytz/zoneinfo/Asia/Urumqi differ diff --git a/pytz/zoneinfo/Asia/Ust-Nera b/pytz/zoneinfo/Asia/Ust-Nera new file mode 100644 index 0000000..0efacd6 Binary files /dev/null and b/pytz/zoneinfo/Asia/Ust-Nera differ diff --git a/pytz/zoneinfo/Asia/Vientiane b/pytz/zoneinfo/Asia/Vientiane new file mode 100644 index 0000000..e8e7627 Binary files /dev/null and b/pytz/zoneinfo/Asia/Vientiane differ diff --git a/pytz/zoneinfo/Asia/Vladivostok b/pytz/zoneinfo/Asia/Vladivostok new file mode 100644 index 0000000..156c8e6 Binary files /dev/null and b/pytz/zoneinfo/Asia/Vladivostok differ diff --git a/pytz/zoneinfo/Asia/Yakutsk b/pytz/zoneinfo/Asia/Yakutsk new file mode 100644 index 0000000..58ff25e Binary files /dev/null and b/pytz/zoneinfo/Asia/Yakutsk differ diff --git a/pytz/zoneinfo/Asia/Yekaterinburg b/pytz/zoneinfo/Asia/Yekaterinburg new file mode 100644 index 0000000..a1baafa Binary files /dev/null and b/pytz/zoneinfo/Asia/Yekaterinburg differ diff --git a/pytz/zoneinfo/Asia/Yerevan b/pytz/zoneinfo/Asia/Yerevan new file mode 100644 index 0000000..fa62c24 Binary files /dev/null and b/pytz/zoneinfo/Asia/Yerevan differ diff --git a/pytz/zoneinfo/Atlantic/Azores b/pytz/zoneinfo/Atlantic/Azores new file mode 100644 index 0000000..1f53253 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Azores differ diff --git a/pytz/zoneinfo/Atlantic/Bermuda b/pytz/zoneinfo/Atlantic/Bermuda new file mode 100644 index 0000000..548d979 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Bermuda differ diff --git a/pytz/zoneinfo/Atlantic/Canary b/pytz/zoneinfo/Atlantic/Canary new file mode 100644 index 0000000..007dcf4 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Canary differ diff --git a/pytz/zoneinfo/Atlantic/Cape_Verde b/pytz/zoneinfo/Atlantic/Cape_Verde new file mode 100644 index 0000000..18b676c Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Cape_Verde differ diff --git a/pytz/zoneinfo/Atlantic/Faeroe b/pytz/zoneinfo/Atlantic/Faeroe new file mode 100644 index 0000000..c486518 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Faeroe differ diff --git a/pytz/zoneinfo/Atlantic/Faroe b/pytz/zoneinfo/Atlantic/Faroe new file mode 100644 index 0000000..c486518 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Faroe differ diff --git a/pytz/zoneinfo/Atlantic/Jan_Mayen b/pytz/zoneinfo/Atlantic/Jan_Mayen new file mode 100644 index 0000000..239c017 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Jan_Mayen differ diff --git a/pytz/zoneinfo/Atlantic/Madeira b/pytz/zoneinfo/Atlantic/Madeira new file mode 100644 index 0000000..3687fd6 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Madeira differ diff --git a/pytz/zoneinfo/Atlantic/Reykjavik b/pytz/zoneinfo/Atlantic/Reykjavik new file mode 100644 index 0000000..35ba7a1 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Reykjavik differ diff --git a/pytz/zoneinfo/Atlantic/South_Georgia b/pytz/zoneinfo/Atlantic/South_Georgia new file mode 100644 index 0000000..b1191c9 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/South_Georgia differ diff --git a/pytz/zoneinfo/Atlantic/St_Helena b/pytz/zoneinfo/Atlantic/St_Helena new file mode 100644 index 0000000..6fd1af3 Binary files /dev/null and b/pytz/zoneinfo/Atlantic/St_Helena differ diff --git a/pytz/zoneinfo/Atlantic/Stanley b/pytz/zoneinfo/Atlantic/Stanley new file mode 100644 index 0000000..aec7a5d Binary files /dev/null and b/pytz/zoneinfo/Atlantic/Stanley differ diff --git a/pytz/zoneinfo/Australia/ACT b/pytz/zoneinfo/Australia/ACT new file mode 100644 index 0000000..aaed12c Binary files /dev/null and b/pytz/zoneinfo/Australia/ACT differ diff --git a/pytz/zoneinfo/Australia/Adelaide b/pytz/zoneinfo/Australia/Adelaide new file mode 100644 index 0000000..4f331a8 Binary files /dev/null and b/pytz/zoneinfo/Australia/Adelaide differ diff --git a/pytz/zoneinfo/Australia/Brisbane b/pytz/zoneinfo/Australia/Brisbane new file mode 100644 index 0000000..a327d83 Binary files /dev/null and b/pytz/zoneinfo/Australia/Brisbane differ diff --git a/pytz/zoneinfo/Australia/Broken_Hill b/pytz/zoneinfo/Australia/Broken_Hill new file mode 100644 index 0000000..768b167 Binary files /dev/null and b/pytz/zoneinfo/Australia/Broken_Hill differ diff --git a/pytz/zoneinfo/Australia/Canberra b/pytz/zoneinfo/Australia/Canberra new file mode 100644 index 0000000..aaed12c Binary files /dev/null and b/pytz/zoneinfo/Australia/Canberra differ diff --git a/pytz/zoneinfo/Australia/Currie b/pytz/zoneinfo/Australia/Currie new file mode 100644 index 0000000..a3f6f29 Binary files /dev/null and b/pytz/zoneinfo/Australia/Currie differ diff --git a/pytz/zoneinfo/Australia/Darwin b/pytz/zoneinfo/Australia/Darwin new file mode 100644 index 0000000..c6ae9a7 Binary files /dev/null and b/pytz/zoneinfo/Australia/Darwin differ diff --git a/pytz/zoneinfo/Australia/Eucla b/pytz/zoneinfo/Australia/Eucla new file mode 100644 index 0000000..baba07a Binary files /dev/null and b/pytz/zoneinfo/Australia/Eucla differ diff --git a/pytz/zoneinfo/Australia/Hobart b/pytz/zoneinfo/Australia/Hobart new file mode 100644 index 0000000..07784ce Binary files /dev/null and b/pytz/zoneinfo/Australia/Hobart differ diff --git a/pytz/zoneinfo/Australia/LHI b/pytz/zoneinfo/Australia/LHI new file mode 100644 index 0000000..a653e51 Binary files /dev/null and b/pytz/zoneinfo/Australia/LHI differ diff --git a/pytz/zoneinfo/Australia/Lindeman b/pytz/zoneinfo/Australia/Lindeman new file mode 100644 index 0000000..71ca143 Binary files /dev/null and b/pytz/zoneinfo/Australia/Lindeman differ diff --git a/pytz/zoneinfo/Australia/Lord_Howe b/pytz/zoneinfo/Australia/Lord_Howe new file mode 100644 index 0000000..a653e51 Binary files /dev/null and b/pytz/zoneinfo/Australia/Lord_Howe differ diff --git a/pytz/zoneinfo/Australia/Melbourne b/pytz/zoneinfo/Australia/Melbourne new file mode 100644 index 0000000..ec8dfe0 Binary files /dev/null and b/pytz/zoneinfo/Australia/Melbourne differ diff --git a/pytz/zoneinfo/Australia/NSW b/pytz/zoneinfo/Australia/NSW new file mode 100644 index 0000000..aaed12c Binary files /dev/null and b/pytz/zoneinfo/Australia/NSW differ diff --git a/pytz/zoneinfo/Australia/North b/pytz/zoneinfo/Australia/North new file mode 100644 index 0000000..c6ae9a7 Binary files /dev/null and b/pytz/zoneinfo/Australia/North differ diff --git a/pytz/zoneinfo/Australia/Perth b/pytz/zoneinfo/Australia/Perth new file mode 100644 index 0000000..85c26d5 Binary files /dev/null and b/pytz/zoneinfo/Australia/Perth differ diff --git a/pytz/zoneinfo/Australia/Queensland b/pytz/zoneinfo/Australia/Queensland new file mode 100644 index 0000000..a327d83 Binary files /dev/null and b/pytz/zoneinfo/Australia/Queensland differ diff --git a/pytz/zoneinfo/Australia/South b/pytz/zoneinfo/Australia/South new file mode 100644 index 0000000..4f331a8 Binary files /dev/null and b/pytz/zoneinfo/Australia/South differ diff --git a/pytz/zoneinfo/Australia/Sydney b/pytz/zoneinfo/Australia/Sydney new file mode 100644 index 0000000..aaed12c Binary files /dev/null and b/pytz/zoneinfo/Australia/Sydney differ diff --git a/pytz/zoneinfo/Australia/Tasmania b/pytz/zoneinfo/Australia/Tasmania new file mode 100644 index 0000000..07784ce Binary files /dev/null and b/pytz/zoneinfo/Australia/Tasmania differ diff --git a/pytz/zoneinfo/Australia/Victoria b/pytz/zoneinfo/Australia/Victoria new file mode 100644 index 0000000..ec8dfe0 Binary files /dev/null and b/pytz/zoneinfo/Australia/Victoria differ diff --git a/pytz/zoneinfo/Australia/West b/pytz/zoneinfo/Australia/West new file mode 100644 index 0000000..85c26d5 Binary files /dev/null and b/pytz/zoneinfo/Australia/West differ diff --git a/pytz/zoneinfo/Australia/Yancowinna b/pytz/zoneinfo/Australia/Yancowinna new file mode 100644 index 0000000..768b167 Binary files /dev/null and b/pytz/zoneinfo/Australia/Yancowinna differ diff --git a/pytz/zoneinfo/Brazil/Acre b/pytz/zoneinfo/Brazil/Acre new file mode 100644 index 0000000..788d0e9 Binary files /dev/null and b/pytz/zoneinfo/Brazil/Acre differ diff --git a/pytz/zoneinfo/Brazil/DeNoronha b/pytz/zoneinfo/Brazil/DeNoronha new file mode 100644 index 0000000..774b14e Binary files /dev/null and b/pytz/zoneinfo/Brazil/DeNoronha differ diff --git a/pytz/zoneinfo/Brazil/East b/pytz/zoneinfo/Brazil/East new file mode 100644 index 0000000..552ce7c Binary files /dev/null and b/pytz/zoneinfo/Brazil/East differ diff --git a/pytz/zoneinfo/Brazil/West b/pytz/zoneinfo/Brazil/West new file mode 100644 index 0000000..e0222f1 Binary files /dev/null and b/pytz/zoneinfo/Brazil/West differ diff --git a/pytz/zoneinfo/CET b/pytz/zoneinfo/CET new file mode 100644 index 0000000..4c4f8ef Binary files /dev/null and b/pytz/zoneinfo/CET differ diff --git a/pytz/zoneinfo/CST6CDT b/pytz/zoneinfo/CST6CDT new file mode 100644 index 0000000..5c8a1d9 Binary files /dev/null and b/pytz/zoneinfo/CST6CDT differ diff --git a/pytz/zoneinfo/Canada/Atlantic b/pytz/zoneinfo/Canada/Atlantic new file mode 100644 index 0000000..f86ece4 Binary files /dev/null and b/pytz/zoneinfo/Canada/Atlantic differ diff --git a/pytz/zoneinfo/Canada/Central b/pytz/zoneinfo/Canada/Central new file mode 100644 index 0000000..2ffe3d8 Binary files /dev/null and b/pytz/zoneinfo/Canada/Central differ diff --git a/pytz/zoneinfo/Canada/East-Saskatchewan b/pytz/zoneinfo/Canada/East-Saskatchewan new file mode 100644 index 0000000..5fe8d6b Binary files /dev/null and b/pytz/zoneinfo/Canada/East-Saskatchewan differ diff --git a/pytz/zoneinfo/Canada/Eastern b/pytz/zoneinfo/Canada/Eastern new file mode 100644 index 0000000..7b4682a Binary files /dev/null and b/pytz/zoneinfo/Canada/Eastern differ diff --git a/pytz/zoneinfo/Canada/Mountain b/pytz/zoneinfo/Canada/Mountain new file mode 100644 index 0000000..d02fbcd Binary files /dev/null and b/pytz/zoneinfo/Canada/Mountain differ diff --git a/pytz/zoneinfo/Canada/Newfoundland b/pytz/zoneinfo/Canada/Newfoundland new file mode 100644 index 0000000..a1d1485 Binary files /dev/null and b/pytz/zoneinfo/Canada/Newfoundland differ diff --git a/pytz/zoneinfo/Canada/Pacific b/pytz/zoneinfo/Canada/Pacific new file mode 100644 index 0000000..9b5d924 Binary files /dev/null and b/pytz/zoneinfo/Canada/Pacific differ diff --git a/pytz/zoneinfo/Canada/Saskatchewan b/pytz/zoneinfo/Canada/Saskatchewan new file mode 100644 index 0000000..5fe8d6b Binary files /dev/null and b/pytz/zoneinfo/Canada/Saskatchewan differ diff --git a/pytz/zoneinfo/Canada/Yukon b/pytz/zoneinfo/Canada/Yukon new file mode 100644 index 0000000..8604c5c Binary files /dev/null and b/pytz/zoneinfo/Canada/Yukon differ diff --git a/pytz/zoneinfo/Chile/Continental b/pytz/zoneinfo/Chile/Continental new file mode 100644 index 0000000..92cf559 Binary files /dev/null and b/pytz/zoneinfo/Chile/Continental differ diff --git a/pytz/zoneinfo/Chile/EasterIsland b/pytz/zoneinfo/Chile/EasterIsland new file mode 100644 index 0000000..8c8a6c7 Binary files /dev/null and b/pytz/zoneinfo/Chile/EasterIsland differ diff --git a/pytz/zoneinfo/Cuba b/pytz/zoneinfo/Cuba new file mode 100644 index 0000000..1a58fcd Binary files /dev/null and b/pytz/zoneinfo/Cuba differ diff --git a/pytz/zoneinfo/EET b/pytz/zoneinfo/EET new file mode 100644 index 0000000..beb273a Binary files /dev/null and b/pytz/zoneinfo/EET differ diff --git a/pytz/zoneinfo/EST b/pytz/zoneinfo/EST new file mode 100644 index 0000000..ae34663 Binary files /dev/null and b/pytz/zoneinfo/EST differ diff --git a/pytz/zoneinfo/EST5EDT b/pytz/zoneinfo/EST5EDT new file mode 100644 index 0000000..54541fc Binary files /dev/null and b/pytz/zoneinfo/EST5EDT differ diff --git a/pytz/zoneinfo/Egypt b/pytz/zoneinfo/Egypt new file mode 100644 index 0000000..0eeed11 Binary files /dev/null and b/pytz/zoneinfo/Egypt differ diff --git a/pytz/zoneinfo/Eire b/pytz/zoneinfo/Eire new file mode 100644 index 0000000..a7cffbb Binary files /dev/null and b/pytz/zoneinfo/Eire differ diff --git a/pytz/zoneinfo/Etc/GMT b/pytz/zoneinfo/Etc/GMT new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT differ diff --git a/pytz/zoneinfo/Etc/GMT+0 b/pytz/zoneinfo/Etc/GMT+0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+0 differ diff --git a/pytz/zoneinfo/Etc/GMT+1 b/pytz/zoneinfo/Etc/GMT+1 new file mode 100644 index 0000000..2f40cc7 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+1 differ diff --git a/pytz/zoneinfo/Etc/GMT+10 b/pytz/zoneinfo/Etc/GMT+10 new file mode 100644 index 0000000..2087965 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+10 differ diff --git a/pytz/zoneinfo/Etc/GMT+11 b/pytz/zoneinfo/Etc/GMT+11 new file mode 100644 index 0000000..af4a6b3 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+11 differ diff --git a/pytz/zoneinfo/Etc/GMT+12 b/pytz/zoneinfo/Etc/GMT+12 new file mode 100644 index 0000000..f095534 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+12 differ diff --git a/pytz/zoneinfo/Etc/GMT+2 b/pytz/zoneinfo/Etc/GMT+2 new file mode 100644 index 0000000..85a1fc1 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+2 differ diff --git a/pytz/zoneinfo/Etc/GMT+3 b/pytz/zoneinfo/Etc/GMT+3 new file mode 100644 index 0000000..a24f587 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+3 differ diff --git a/pytz/zoneinfo/Etc/GMT+4 b/pytz/zoneinfo/Etc/GMT+4 new file mode 100644 index 0000000..ab74517 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+4 differ diff --git a/pytz/zoneinfo/Etc/GMT+5 b/pytz/zoneinfo/Etc/GMT+5 new file mode 100644 index 0000000..01f1d77 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+5 differ diff --git a/pytz/zoneinfo/Etc/GMT+6 b/pytz/zoneinfo/Etc/GMT+6 new file mode 100644 index 0000000..3ced48b Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+6 differ diff --git a/pytz/zoneinfo/Etc/GMT+7 b/pytz/zoneinfo/Etc/GMT+7 new file mode 100644 index 0000000..5f58127 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+7 differ diff --git a/pytz/zoneinfo/Etc/GMT+8 b/pytz/zoneinfo/Etc/GMT+8 new file mode 100644 index 0000000..be23d96 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+8 differ diff --git a/pytz/zoneinfo/Etc/GMT+9 b/pytz/zoneinfo/Etc/GMT+9 new file mode 100644 index 0000000..d00c50c Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT+9 differ diff --git a/pytz/zoneinfo/Etc/GMT-0 b/pytz/zoneinfo/Etc/GMT-0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-0 differ diff --git a/pytz/zoneinfo/Etc/GMT-1 b/pytz/zoneinfo/Etc/GMT-1 new file mode 100644 index 0000000..088a76e Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-1 differ diff --git a/pytz/zoneinfo/Etc/GMT-10 b/pytz/zoneinfo/Etc/GMT-10 new file mode 100644 index 0000000..a4da44f Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-10 differ diff --git a/pytz/zoneinfo/Etc/GMT-11 b/pytz/zoneinfo/Etc/GMT-11 new file mode 100644 index 0000000..e0112a9 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-11 differ diff --git a/pytz/zoneinfo/Etc/GMT-12 b/pytz/zoneinfo/Etc/GMT-12 new file mode 100644 index 0000000..c1e08b7 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-12 differ diff --git a/pytz/zoneinfo/Etc/GMT-13 b/pytz/zoneinfo/Etc/GMT-13 new file mode 100644 index 0000000..1ab0519 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-13 differ diff --git a/pytz/zoneinfo/Etc/GMT-14 b/pytz/zoneinfo/Etc/GMT-14 new file mode 100644 index 0000000..afaf3fa Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-14 differ diff --git a/pytz/zoneinfo/Etc/GMT-2 b/pytz/zoneinfo/Etc/GMT-2 new file mode 100644 index 0000000..6289cad Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-2 differ diff --git a/pytz/zoneinfo/Etc/GMT-3 b/pytz/zoneinfo/Etc/GMT-3 new file mode 100644 index 0000000..27434cd Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-3 differ diff --git a/pytz/zoneinfo/Etc/GMT-4 b/pytz/zoneinfo/Etc/GMT-4 new file mode 100644 index 0000000..2fc6966 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-4 differ diff --git a/pytz/zoneinfo/Etc/GMT-5 b/pytz/zoneinfo/Etc/GMT-5 new file mode 100644 index 0000000..8508e72 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-5 differ diff --git a/pytz/zoneinfo/Etc/GMT-6 b/pytz/zoneinfo/Etc/GMT-6 new file mode 100644 index 0000000..5b9678e Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-6 differ diff --git a/pytz/zoneinfo/Etc/GMT-7 b/pytz/zoneinfo/Etc/GMT-7 new file mode 100644 index 0000000..ccf4c39 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-7 differ diff --git a/pytz/zoneinfo/Etc/GMT-8 b/pytz/zoneinfo/Etc/GMT-8 new file mode 100644 index 0000000..db4cfa6 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-8 differ diff --git a/pytz/zoneinfo/Etc/GMT-9 b/pytz/zoneinfo/Etc/GMT-9 new file mode 100644 index 0000000..56ea117 Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT-9 differ diff --git a/pytz/zoneinfo/Etc/GMT0 b/pytz/zoneinfo/Etc/GMT0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Etc/GMT0 differ diff --git a/pytz/zoneinfo/Etc/Greenwich b/pytz/zoneinfo/Etc/Greenwich new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Etc/Greenwich differ diff --git a/pytz/zoneinfo/Etc/UCT b/pytz/zoneinfo/Etc/UCT new file mode 100644 index 0000000..40147b9 Binary files /dev/null and b/pytz/zoneinfo/Etc/UCT differ diff --git a/pytz/zoneinfo/Etc/UTC b/pytz/zoneinfo/Etc/UTC new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/Etc/UTC differ diff --git a/pytz/zoneinfo/Etc/Universal b/pytz/zoneinfo/Etc/Universal new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/Etc/Universal differ diff --git a/pytz/zoneinfo/Etc/Zulu b/pytz/zoneinfo/Etc/Zulu new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/Etc/Zulu differ diff --git a/pytz/zoneinfo/Europe/Amsterdam b/pytz/zoneinfo/Europe/Amsterdam new file mode 100644 index 0000000..f74769d Binary files /dev/null and b/pytz/zoneinfo/Europe/Amsterdam differ diff --git a/pytz/zoneinfo/Europe/Andorra b/pytz/zoneinfo/Europe/Andorra new file mode 100644 index 0000000..b06de7a Binary files /dev/null and b/pytz/zoneinfo/Europe/Andorra differ diff --git a/pytz/zoneinfo/Europe/Athens b/pytz/zoneinfo/Europe/Athens new file mode 100644 index 0000000..0001602 Binary files /dev/null and b/pytz/zoneinfo/Europe/Athens differ diff --git a/pytz/zoneinfo/Europe/Belfast b/pytz/zoneinfo/Europe/Belfast new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/Europe/Belfast differ diff --git a/pytz/zoneinfo/Europe/Belgrade b/pytz/zoneinfo/Europe/Belgrade new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Belgrade differ diff --git a/pytz/zoneinfo/Europe/Berlin b/pytz/zoneinfo/Europe/Berlin new file mode 100644 index 0000000..b4f2a2a Binary files /dev/null and b/pytz/zoneinfo/Europe/Berlin differ diff --git a/pytz/zoneinfo/Europe/Bratislava b/pytz/zoneinfo/Europe/Bratislava new file mode 100644 index 0000000..4eabe5c Binary files /dev/null and b/pytz/zoneinfo/Europe/Bratislava differ diff --git a/pytz/zoneinfo/Europe/Brussels b/pytz/zoneinfo/Europe/Brussels new file mode 100644 index 0000000..d8f19a6 Binary files /dev/null and b/pytz/zoneinfo/Europe/Brussels differ diff --git a/pytz/zoneinfo/Europe/Bucharest b/pytz/zoneinfo/Europe/Bucharest new file mode 100644 index 0000000..e0eac4c Binary files /dev/null and b/pytz/zoneinfo/Europe/Bucharest differ diff --git a/pytz/zoneinfo/Europe/Budapest b/pytz/zoneinfo/Europe/Budapest new file mode 100644 index 0000000..3ddf6a5 Binary files /dev/null and b/pytz/zoneinfo/Europe/Budapest differ diff --git a/pytz/zoneinfo/Europe/Busingen b/pytz/zoneinfo/Europe/Busingen new file mode 100644 index 0000000..9c2b600 Binary files /dev/null and b/pytz/zoneinfo/Europe/Busingen differ diff --git a/pytz/zoneinfo/Europe/Chisinau b/pytz/zoneinfo/Europe/Chisinau new file mode 100644 index 0000000..7998b2d Binary files /dev/null and b/pytz/zoneinfo/Europe/Chisinau differ diff --git a/pytz/zoneinfo/Europe/Copenhagen b/pytz/zoneinfo/Europe/Copenhagen new file mode 100644 index 0000000..be87cf1 Binary files /dev/null and b/pytz/zoneinfo/Europe/Copenhagen differ diff --git a/pytz/zoneinfo/Europe/Dublin b/pytz/zoneinfo/Europe/Dublin new file mode 100644 index 0000000..a7cffbb Binary files /dev/null and b/pytz/zoneinfo/Europe/Dublin differ diff --git a/pytz/zoneinfo/Europe/Gibraltar b/pytz/zoneinfo/Europe/Gibraltar new file mode 100644 index 0000000..a7105fa Binary files /dev/null and b/pytz/zoneinfo/Europe/Gibraltar differ diff --git a/pytz/zoneinfo/Europe/Guernsey b/pytz/zoneinfo/Europe/Guernsey new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/Europe/Guernsey differ diff --git a/pytz/zoneinfo/Europe/Helsinki b/pytz/zoneinfo/Europe/Helsinki new file mode 100644 index 0000000..29b3c81 Binary files /dev/null and b/pytz/zoneinfo/Europe/Helsinki differ diff --git a/pytz/zoneinfo/Europe/Isle_of_Man b/pytz/zoneinfo/Europe/Isle_of_Man new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/Europe/Isle_of_Man differ diff --git a/pytz/zoneinfo/Europe/Istanbul b/pytz/zoneinfo/Europe/Istanbul new file mode 100644 index 0000000..d89aa3a Binary files /dev/null and b/pytz/zoneinfo/Europe/Istanbul differ diff --git a/pytz/zoneinfo/Europe/Jersey b/pytz/zoneinfo/Europe/Jersey new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/Europe/Jersey differ diff --git a/pytz/zoneinfo/Europe/Kaliningrad b/pytz/zoneinfo/Europe/Kaliningrad new file mode 100644 index 0000000..4805fe4 Binary files /dev/null and b/pytz/zoneinfo/Europe/Kaliningrad differ diff --git a/pytz/zoneinfo/Europe/Kiev b/pytz/zoneinfo/Europe/Kiev new file mode 100644 index 0000000..b3e20a7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Kiev differ diff --git a/pytz/zoneinfo/Europe/Lisbon b/pytz/zoneinfo/Europe/Lisbon new file mode 100644 index 0000000..b9aff3a Binary files /dev/null and b/pytz/zoneinfo/Europe/Lisbon differ diff --git a/pytz/zoneinfo/Europe/Ljubljana b/pytz/zoneinfo/Europe/Ljubljana new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Ljubljana differ diff --git a/pytz/zoneinfo/Europe/London b/pytz/zoneinfo/Europe/London new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/Europe/London differ diff --git a/pytz/zoneinfo/Europe/Luxembourg b/pytz/zoneinfo/Europe/Luxembourg new file mode 100644 index 0000000..6fae86c Binary files /dev/null and b/pytz/zoneinfo/Europe/Luxembourg differ diff --git a/pytz/zoneinfo/Europe/Madrid b/pytz/zoneinfo/Europe/Madrid new file mode 100644 index 0000000..af47432 Binary files /dev/null and b/pytz/zoneinfo/Europe/Madrid differ diff --git a/pytz/zoneinfo/Europe/Malta b/pytz/zoneinfo/Europe/Malta new file mode 100644 index 0000000..d251938 Binary files /dev/null and b/pytz/zoneinfo/Europe/Malta differ diff --git a/pytz/zoneinfo/Europe/Mariehamn b/pytz/zoneinfo/Europe/Mariehamn new file mode 100644 index 0000000..29b3c81 Binary files /dev/null and b/pytz/zoneinfo/Europe/Mariehamn differ diff --git a/pytz/zoneinfo/Europe/Minsk b/pytz/zoneinfo/Europe/Minsk new file mode 100644 index 0000000..28ef30a Binary files /dev/null and b/pytz/zoneinfo/Europe/Minsk differ diff --git a/pytz/zoneinfo/Europe/Monaco b/pytz/zoneinfo/Europe/Monaco new file mode 100644 index 0000000..0b40f1e Binary files /dev/null and b/pytz/zoneinfo/Europe/Monaco differ diff --git a/pytz/zoneinfo/Europe/Moscow b/pytz/zoneinfo/Europe/Moscow new file mode 100644 index 0000000..bdbbaeb Binary files /dev/null and b/pytz/zoneinfo/Europe/Moscow differ diff --git a/pytz/zoneinfo/Europe/Nicosia b/pytz/zoneinfo/Europe/Nicosia new file mode 100644 index 0000000..3e663b2 Binary files /dev/null and b/pytz/zoneinfo/Europe/Nicosia differ diff --git a/pytz/zoneinfo/Europe/Oslo b/pytz/zoneinfo/Europe/Oslo new file mode 100644 index 0000000..239c017 Binary files /dev/null and b/pytz/zoneinfo/Europe/Oslo differ diff --git a/pytz/zoneinfo/Europe/Paris b/pytz/zoneinfo/Europe/Paris new file mode 100644 index 0000000..cf6e2e2 Binary files /dev/null and b/pytz/zoneinfo/Europe/Paris differ diff --git a/pytz/zoneinfo/Europe/Podgorica b/pytz/zoneinfo/Europe/Podgorica new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Podgorica differ diff --git a/pytz/zoneinfo/Europe/Prague b/pytz/zoneinfo/Europe/Prague new file mode 100644 index 0000000..4eabe5c Binary files /dev/null and b/pytz/zoneinfo/Europe/Prague differ diff --git a/pytz/zoneinfo/Europe/Riga b/pytz/zoneinfo/Europe/Riga new file mode 100644 index 0000000..b729ee8 Binary files /dev/null and b/pytz/zoneinfo/Europe/Riga differ diff --git a/pytz/zoneinfo/Europe/Rome b/pytz/zoneinfo/Europe/Rome new file mode 100644 index 0000000..5cc3040 Binary files /dev/null and b/pytz/zoneinfo/Europe/Rome differ diff --git a/pytz/zoneinfo/Europe/Samara b/pytz/zoneinfo/Europe/Samara new file mode 100644 index 0000000..79759f5 Binary files /dev/null and b/pytz/zoneinfo/Europe/Samara differ diff --git a/pytz/zoneinfo/Europe/San_Marino b/pytz/zoneinfo/Europe/San_Marino new file mode 100644 index 0000000..5cc3040 Binary files /dev/null and b/pytz/zoneinfo/Europe/San_Marino differ diff --git a/pytz/zoneinfo/Europe/Sarajevo b/pytz/zoneinfo/Europe/Sarajevo new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Sarajevo differ diff --git a/pytz/zoneinfo/Europe/Simferopol b/pytz/zoneinfo/Europe/Simferopol new file mode 100644 index 0000000..ebe9017 Binary files /dev/null and b/pytz/zoneinfo/Europe/Simferopol differ diff --git a/pytz/zoneinfo/Europe/Skopje b/pytz/zoneinfo/Europe/Skopje new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Skopje differ diff --git a/pytz/zoneinfo/Europe/Sofia b/pytz/zoneinfo/Europe/Sofia new file mode 100644 index 0000000..763e074 Binary files /dev/null and b/pytz/zoneinfo/Europe/Sofia differ diff --git a/pytz/zoneinfo/Europe/Stockholm b/pytz/zoneinfo/Europe/Stockholm new file mode 100644 index 0000000..43c7f2e Binary files /dev/null and b/pytz/zoneinfo/Europe/Stockholm differ diff --git a/pytz/zoneinfo/Europe/Tallinn b/pytz/zoneinfo/Europe/Tallinn new file mode 100644 index 0000000..8a4f124 Binary files /dev/null and b/pytz/zoneinfo/Europe/Tallinn differ diff --git a/pytz/zoneinfo/Europe/Tirane b/pytz/zoneinfo/Europe/Tirane new file mode 100644 index 0000000..52c16a4 Binary files /dev/null and b/pytz/zoneinfo/Europe/Tirane differ diff --git a/pytz/zoneinfo/Europe/Tiraspol b/pytz/zoneinfo/Europe/Tiraspol new file mode 100644 index 0000000..7998b2d Binary files /dev/null and b/pytz/zoneinfo/Europe/Tiraspol differ diff --git a/pytz/zoneinfo/Europe/Uzhgorod b/pytz/zoneinfo/Europe/Uzhgorod new file mode 100644 index 0000000..8ddba90 Binary files /dev/null and b/pytz/zoneinfo/Europe/Uzhgorod differ diff --git a/pytz/zoneinfo/Europe/Vaduz b/pytz/zoneinfo/Europe/Vaduz new file mode 100644 index 0000000..9c2b600 Binary files /dev/null and b/pytz/zoneinfo/Europe/Vaduz differ diff --git a/pytz/zoneinfo/Europe/Vatican b/pytz/zoneinfo/Europe/Vatican new file mode 100644 index 0000000..5cc3040 Binary files /dev/null and b/pytz/zoneinfo/Europe/Vatican differ diff --git a/pytz/zoneinfo/Europe/Vienna b/pytz/zoneinfo/Europe/Vienna new file mode 100644 index 0000000..9c0fac5 Binary files /dev/null and b/pytz/zoneinfo/Europe/Vienna differ diff --git a/pytz/zoneinfo/Europe/Vilnius b/pytz/zoneinfo/Europe/Vilnius new file mode 100644 index 0000000..3b11880 Binary files /dev/null and b/pytz/zoneinfo/Europe/Vilnius differ diff --git a/pytz/zoneinfo/Europe/Volgograd b/pytz/zoneinfo/Europe/Volgograd new file mode 100644 index 0000000..c62c32a Binary files /dev/null and b/pytz/zoneinfo/Europe/Volgograd differ diff --git a/pytz/zoneinfo/Europe/Warsaw b/pytz/zoneinfo/Europe/Warsaw new file mode 100644 index 0000000..5cbba41 Binary files /dev/null and b/pytz/zoneinfo/Europe/Warsaw differ diff --git a/pytz/zoneinfo/Europe/Zagreb b/pytz/zoneinfo/Europe/Zagreb new file mode 100644 index 0000000..79c25d7 Binary files /dev/null and b/pytz/zoneinfo/Europe/Zagreb differ diff --git a/pytz/zoneinfo/Europe/Zaporozhye b/pytz/zoneinfo/Europe/Zaporozhye new file mode 100644 index 0000000..49b568e Binary files /dev/null and b/pytz/zoneinfo/Europe/Zaporozhye differ diff --git a/pytz/zoneinfo/Europe/Zurich b/pytz/zoneinfo/Europe/Zurich new file mode 100644 index 0000000..9c2b600 Binary files /dev/null and b/pytz/zoneinfo/Europe/Zurich differ diff --git a/pytz/zoneinfo/Factory b/pytz/zoneinfo/Factory new file mode 100644 index 0000000..6e6c452 Binary files /dev/null and b/pytz/zoneinfo/Factory differ diff --git a/pytz/zoneinfo/GB b/pytz/zoneinfo/GB new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/GB differ diff --git a/pytz/zoneinfo/GB-Eire b/pytz/zoneinfo/GB-Eire new file mode 100644 index 0000000..4527515 Binary files /dev/null and b/pytz/zoneinfo/GB-Eire differ diff --git a/pytz/zoneinfo/GMT b/pytz/zoneinfo/GMT new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/GMT differ diff --git a/pytz/zoneinfo/GMT+0 b/pytz/zoneinfo/GMT+0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/GMT+0 differ diff --git a/pytz/zoneinfo/GMT-0 b/pytz/zoneinfo/GMT-0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/GMT-0 differ diff --git a/pytz/zoneinfo/GMT0 b/pytz/zoneinfo/GMT0 new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/GMT0 differ diff --git a/pytz/zoneinfo/Greenwich b/pytz/zoneinfo/Greenwich new file mode 100644 index 0000000..c05e45f Binary files /dev/null and b/pytz/zoneinfo/Greenwich differ diff --git a/pytz/zoneinfo/HST b/pytz/zoneinfo/HST new file mode 100644 index 0000000..03e4db0 Binary files /dev/null and b/pytz/zoneinfo/HST differ diff --git a/pytz/zoneinfo/Hongkong b/pytz/zoneinfo/Hongkong new file mode 100644 index 0000000..dc9058e Binary files /dev/null and b/pytz/zoneinfo/Hongkong differ diff --git a/pytz/zoneinfo/Iceland b/pytz/zoneinfo/Iceland new file mode 100644 index 0000000..35ba7a1 Binary files /dev/null and b/pytz/zoneinfo/Iceland differ diff --git a/pytz/zoneinfo/Indian/Antananarivo b/pytz/zoneinfo/Indian/Antananarivo new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Indian/Antananarivo differ diff --git a/pytz/zoneinfo/Indian/Chagos b/pytz/zoneinfo/Indian/Chagos new file mode 100644 index 0000000..a616bdf Binary files /dev/null and b/pytz/zoneinfo/Indian/Chagos differ diff --git a/pytz/zoneinfo/Indian/Christmas b/pytz/zoneinfo/Indian/Christmas new file mode 100644 index 0000000..ebcd262 Binary files /dev/null and b/pytz/zoneinfo/Indian/Christmas differ diff --git a/pytz/zoneinfo/Indian/Cocos b/pytz/zoneinfo/Indian/Cocos new file mode 100644 index 0000000..cd603f2 Binary files /dev/null and b/pytz/zoneinfo/Indian/Cocos differ diff --git a/pytz/zoneinfo/Indian/Comoro b/pytz/zoneinfo/Indian/Comoro new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Indian/Comoro differ diff --git a/pytz/zoneinfo/Indian/Kerguelen b/pytz/zoneinfo/Indian/Kerguelen new file mode 100644 index 0000000..462851e Binary files /dev/null and b/pytz/zoneinfo/Indian/Kerguelen differ diff --git a/pytz/zoneinfo/Indian/Mahe b/pytz/zoneinfo/Indian/Mahe new file mode 100644 index 0000000..5f42819 Binary files /dev/null and b/pytz/zoneinfo/Indian/Mahe differ diff --git a/pytz/zoneinfo/Indian/Maldives b/pytz/zoneinfo/Indian/Maldives new file mode 100644 index 0000000..cec224f Binary files /dev/null and b/pytz/zoneinfo/Indian/Maldives differ diff --git a/pytz/zoneinfo/Indian/Mauritius b/pytz/zoneinfo/Indian/Mauritius new file mode 100644 index 0000000..66ecc8f Binary files /dev/null and b/pytz/zoneinfo/Indian/Mauritius differ diff --git a/pytz/zoneinfo/Indian/Mayotte b/pytz/zoneinfo/Indian/Mayotte new file mode 100644 index 0000000..750d3dc Binary files /dev/null and b/pytz/zoneinfo/Indian/Mayotte differ diff --git a/pytz/zoneinfo/Indian/Reunion b/pytz/zoneinfo/Indian/Reunion new file mode 100644 index 0000000..c4d0da9 Binary files /dev/null and b/pytz/zoneinfo/Indian/Reunion differ diff --git a/pytz/zoneinfo/Iran b/pytz/zoneinfo/Iran new file mode 100644 index 0000000..8710781 Binary files /dev/null and b/pytz/zoneinfo/Iran differ diff --git a/pytz/zoneinfo/Israel b/pytz/zoneinfo/Israel new file mode 100644 index 0000000..df51199 Binary files /dev/null and b/pytz/zoneinfo/Israel differ diff --git a/pytz/zoneinfo/Jamaica b/pytz/zoneinfo/Jamaica new file mode 100644 index 0000000..006689b Binary files /dev/null and b/pytz/zoneinfo/Jamaica differ diff --git a/pytz/zoneinfo/Japan b/pytz/zoneinfo/Japan new file mode 100644 index 0000000..0244140 Binary files /dev/null and b/pytz/zoneinfo/Japan differ diff --git a/pytz/zoneinfo/Kwajalein b/pytz/zoneinfo/Kwajalein new file mode 100644 index 0000000..094c3cf Binary files /dev/null and b/pytz/zoneinfo/Kwajalein differ diff --git a/pytz/zoneinfo/Libya b/pytz/zoneinfo/Libya new file mode 100644 index 0000000..b32e220 Binary files /dev/null and b/pytz/zoneinfo/Libya differ diff --git a/pytz/zoneinfo/MET b/pytz/zoneinfo/MET new file mode 100644 index 0000000..71963d5 Binary files /dev/null and b/pytz/zoneinfo/MET differ diff --git a/pytz/zoneinfo/MST b/pytz/zoneinfo/MST new file mode 100644 index 0000000..a1bee7c Binary files /dev/null and b/pytz/zoneinfo/MST differ diff --git a/pytz/zoneinfo/MST7MDT b/pytz/zoneinfo/MST7MDT new file mode 100644 index 0000000..726a7e5 Binary files /dev/null and b/pytz/zoneinfo/MST7MDT differ diff --git a/pytz/zoneinfo/Mexico/BajaNorte b/pytz/zoneinfo/Mexico/BajaNorte new file mode 100644 index 0000000..1387475 Binary files /dev/null and b/pytz/zoneinfo/Mexico/BajaNorte differ diff --git a/pytz/zoneinfo/Mexico/BajaSur b/pytz/zoneinfo/Mexico/BajaSur new file mode 100644 index 0000000..afa94c2 Binary files /dev/null and b/pytz/zoneinfo/Mexico/BajaSur differ diff --git a/pytz/zoneinfo/Mexico/General b/pytz/zoneinfo/Mexico/General new file mode 100644 index 0000000..f11e3d2 Binary files /dev/null and b/pytz/zoneinfo/Mexico/General differ diff --git a/pytz/zoneinfo/NZ b/pytz/zoneinfo/NZ new file mode 100644 index 0000000..a5f5b6d Binary files /dev/null and b/pytz/zoneinfo/NZ differ diff --git a/pytz/zoneinfo/NZ-CHAT b/pytz/zoneinfo/NZ-CHAT new file mode 100644 index 0000000..59bc4ed Binary files /dev/null and b/pytz/zoneinfo/NZ-CHAT differ diff --git a/pytz/zoneinfo/Navajo b/pytz/zoneinfo/Navajo new file mode 100644 index 0000000..7fc6691 Binary files /dev/null and b/pytz/zoneinfo/Navajo differ diff --git a/pytz/zoneinfo/PRC b/pytz/zoneinfo/PRC new file mode 100644 index 0000000..dbd132f Binary files /dev/null and b/pytz/zoneinfo/PRC differ diff --git a/pytz/zoneinfo/PST8PDT b/pytz/zoneinfo/PST8PDT new file mode 100644 index 0000000..6242ac0 Binary files /dev/null and b/pytz/zoneinfo/PST8PDT differ diff --git a/pytz/zoneinfo/Pacific/Apia b/pytz/zoneinfo/Pacific/Apia new file mode 100644 index 0000000..cc5d2cd Binary files /dev/null and b/pytz/zoneinfo/Pacific/Apia differ diff --git a/pytz/zoneinfo/Pacific/Auckland b/pytz/zoneinfo/Pacific/Auckland new file mode 100644 index 0000000..a5f5b6d Binary files /dev/null and b/pytz/zoneinfo/Pacific/Auckland differ diff --git a/pytz/zoneinfo/Pacific/Bougainville b/pytz/zoneinfo/Pacific/Bougainville new file mode 100644 index 0000000..219c78c Binary files /dev/null and b/pytz/zoneinfo/Pacific/Bougainville differ diff --git a/pytz/zoneinfo/Pacific/Chatham b/pytz/zoneinfo/Pacific/Chatham new file mode 100644 index 0000000..59bc4ed Binary files /dev/null and b/pytz/zoneinfo/Pacific/Chatham differ diff --git a/pytz/zoneinfo/Pacific/Chuuk b/pytz/zoneinfo/Pacific/Chuuk new file mode 100644 index 0000000..28356bb Binary files /dev/null and b/pytz/zoneinfo/Pacific/Chuuk differ diff --git a/pytz/zoneinfo/Pacific/Easter b/pytz/zoneinfo/Pacific/Easter new file mode 100644 index 0000000..8c8a6c7 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Easter differ diff --git a/pytz/zoneinfo/Pacific/Efate b/pytz/zoneinfo/Pacific/Efate new file mode 100644 index 0000000..1d99519 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Efate differ diff --git a/pytz/zoneinfo/Pacific/Enderbury b/pytz/zoneinfo/Pacific/Enderbury new file mode 100644 index 0000000..4861052 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Enderbury differ diff --git a/pytz/zoneinfo/Pacific/Fakaofo b/pytz/zoneinfo/Pacific/Fakaofo new file mode 100644 index 0000000..e02e18e Binary files /dev/null and b/pytz/zoneinfo/Pacific/Fakaofo differ diff --git a/pytz/zoneinfo/Pacific/Fiji b/pytz/zoneinfo/Pacific/Fiji new file mode 100644 index 0000000..b75f194 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Fiji differ diff --git a/pytz/zoneinfo/Pacific/Funafuti b/pytz/zoneinfo/Pacific/Funafuti new file mode 100644 index 0000000..576dea3 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Funafuti differ diff --git a/pytz/zoneinfo/Pacific/Galapagos b/pytz/zoneinfo/Pacific/Galapagos new file mode 100644 index 0000000..c9a7371 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Galapagos differ diff --git a/pytz/zoneinfo/Pacific/Gambier b/pytz/zoneinfo/Pacific/Gambier new file mode 100644 index 0000000..4ab6c20 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Gambier differ diff --git a/pytz/zoneinfo/Pacific/Guadalcanal b/pytz/zoneinfo/Pacific/Guadalcanal new file mode 100644 index 0000000..b183d1e Binary files /dev/null and b/pytz/zoneinfo/Pacific/Guadalcanal differ diff --git a/pytz/zoneinfo/Pacific/Guam b/pytz/zoneinfo/Pacific/Guam new file mode 100644 index 0000000..4286e6b Binary files /dev/null and b/pytz/zoneinfo/Pacific/Guam differ diff --git a/pytz/zoneinfo/Pacific/Honolulu b/pytz/zoneinfo/Pacific/Honolulu new file mode 100644 index 0000000..bd85577 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Honolulu differ diff --git a/pytz/zoneinfo/Pacific/Johnston b/pytz/zoneinfo/Pacific/Johnston new file mode 100644 index 0000000..bd85577 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Johnston differ diff --git a/pytz/zoneinfo/Pacific/Kiritimati b/pytz/zoneinfo/Pacific/Kiritimati new file mode 100644 index 0000000..c2eafbc Binary files /dev/null and b/pytz/zoneinfo/Pacific/Kiritimati differ diff --git a/pytz/zoneinfo/Pacific/Kosrae b/pytz/zoneinfo/Pacific/Kosrae new file mode 100644 index 0000000..66c4d65 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Kosrae differ diff --git a/pytz/zoneinfo/Pacific/Kwajalein b/pytz/zoneinfo/Pacific/Kwajalein new file mode 100644 index 0000000..094c3cf Binary files /dev/null and b/pytz/zoneinfo/Pacific/Kwajalein differ diff --git a/pytz/zoneinfo/Pacific/Majuro b/pytz/zoneinfo/Pacific/Majuro new file mode 100644 index 0000000..d53b7c2 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Majuro differ diff --git a/pytz/zoneinfo/Pacific/Marquesas b/pytz/zoneinfo/Pacific/Marquesas new file mode 100644 index 0000000..c717c12 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Marquesas differ diff --git a/pytz/zoneinfo/Pacific/Midway b/pytz/zoneinfo/Pacific/Midway new file mode 100644 index 0000000..f2a2f63 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Midway differ diff --git a/pytz/zoneinfo/Pacific/Nauru b/pytz/zoneinfo/Pacific/Nauru new file mode 100644 index 0000000..896ffee Binary files /dev/null and b/pytz/zoneinfo/Pacific/Nauru differ diff --git a/pytz/zoneinfo/Pacific/Niue b/pytz/zoneinfo/Pacific/Niue new file mode 100644 index 0000000..d772edf Binary files /dev/null and b/pytz/zoneinfo/Pacific/Niue differ diff --git a/pytz/zoneinfo/Pacific/Norfolk b/pytz/zoneinfo/Pacific/Norfolk new file mode 100644 index 0000000..3a286be Binary files /dev/null and b/pytz/zoneinfo/Pacific/Norfolk differ diff --git a/pytz/zoneinfo/Pacific/Noumea b/pytz/zoneinfo/Pacific/Noumea new file mode 100644 index 0000000..fcc44e6 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Noumea differ diff --git a/pytz/zoneinfo/Pacific/Pago_Pago b/pytz/zoneinfo/Pacific/Pago_Pago new file mode 100644 index 0000000..1d7649f Binary files /dev/null and b/pytz/zoneinfo/Pacific/Pago_Pago differ diff --git a/pytz/zoneinfo/Pacific/Palau b/pytz/zoneinfo/Pacific/Palau new file mode 100644 index 0000000..28992d2 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Palau differ diff --git a/pytz/zoneinfo/Pacific/Pitcairn b/pytz/zoneinfo/Pacific/Pitcairn new file mode 100644 index 0000000..d62c648 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Pitcairn differ diff --git a/pytz/zoneinfo/Pacific/Pohnpei b/pytz/zoneinfo/Pacific/Pohnpei new file mode 100644 index 0000000..59bd764 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Pohnpei differ diff --git a/pytz/zoneinfo/Pacific/Ponape b/pytz/zoneinfo/Pacific/Ponape new file mode 100644 index 0000000..59bd764 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Ponape differ diff --git a/pytz/zoneinfo/Pacific/Port_Moresby b/pytz/zoneinfo/Pacific/Port_Moresby new file mode 100644 index 0000000..dffa457 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Port_Moresby differ diff --git a/pytz/zoneinfo/Pacific/Rarotonga b/pytz/zoneinfo/Pacific/Rarotonga new file mode 100644 index 0000000..2a25490 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Rarotonga differ diff --git a/pytz/zoneinfo/Pacific/Saipan b/pytz/zoneinfo/Pacific/Saipan new file mode 100644 index 0000000..c54473c Binary files /dev/null and b/pytz/zoneinfo/Pacific/Saipan differ diff --git a/pytz/zoneinfo/Pacific/Samoa b/pytz/zoneinfo/Pacific/Samoa new file mode 100644 index 0000000..1d7649f Binary files /dev/null and b/pytz/zoneinfo/Pacific/Samoa differ diff --git a/pytz/zoneinfo/Pacific/Tahiti b/pytz/zoneinfo/Pacific/Tahiti new file mode 100644 index 0000000..bfc9a7c Binary files /dev/null and b/pytz/zoneinfo/Pacific/Tahiti differ diff --git a/pytz/zoneinfo/Pacific/Tarawa b/pytz/zoneinfo/Pacific/Tarawa new file mode 100644 index 0000000..1e8189c Binary files /dev/null and b/pytz/zoneinfo/Pacific/Tarawa differ diff --git a/pytz/zoneinfo/Pacific/Tongatapu b/pytz/zoneinfo/Pacific/Tongatapu new file mode 100644 index 0000000..71d899b Binary files /dev/null and b/pytz/zoneinfo/Pacific/Tongatapu differ diff --git a/pytz/zoneinfo/Pacific/Truk b/pytz/zoneinfo/Pacific/Truk new file mode 100644 index 0000000..28356bb Binary files /dev/null and b/pytz/zoneinfo/Pacific/Truk differ diff --git a/pytz/zoneinfo/Pacific/Wake b/pytz/zoneinfo/Pacific/Wake new file mode 100644 index 0000000..9e2a37c Binary files /dev/null and b/pytz/zoneinfo/Pacific/Wake differ diff --git a/pytz/zoneinfo/Pacific/Wallis b/pytz/zoneinfo/Pacific/Wallis new file mode 100644 index 0000000..b894471 Binary files /dev/null and b/pytz/zoneinfo/Pacific/Wallis differ diff --git a/pytz/zoneinfo/Pacific/Yap b/pytz/zoneinfo/Pacific/Yap new file mode 100644 index 0000000..28356bb Binary files /dev/null and b/pytz/zoneinfo/Pacific/Yap differ diff --git a/pytz/zoneinfo/Poland b/pytz/zoneinfo/Poland new file mode 100644 index 0000000..5cbba41 Binary files /dev/null and b/pytz/zoneinfo/Poland differ diff --git a/pytz/zoneinfo/Portugal b/pytz/zoneinfo/Portugal new file mode 100644 index 0000000..b9aff3a Binary files /dev/null and b/pytz/zoneinfo/Portugal differ diff --git a/pytz/zoneinfo/ROC b/pytz/zoneinfo/ROC new file mode 100644 index 0000000..4810a0b Binary files /dev/null and b/pytz/zoneinfo/ROC differ diff --git a/pytz/zoneinfo/ROK b/pytz/zoneinfo/ROK new file mode 100644 index 0000000..fd91d5b Binary files /dev/null and b/pytz/zoneinfo/ROK differ diff --git a/pytz/zoneinfo/Singapore b/pytz/zoneinfo/Singapore new file mode 100644 index 0000000..9dd49cb Binary files /dev/null and b/pytz/zoneinfo/Singapore differ diff --git a/pytz/zoneinfo/Turkey b/pytz/zoneinfo/Turkey new file mode 100644 index 0000000..d89aa3a Binary files /dev/null and b/pytz/zoneinfo/Turkey differ diff --git a/pytz/zoneinfo/UCT b/pytz/zoneinfo/UCT new file mode 100644 index 0000000..40147b9 Binary files /dev/null and b/pytz/zoneinfo/UCT differ diff --git a/pytz/zoneinfo/US/Alaska b/pytz/zoneinfo/US/Alaska new file mode 100644 index 0000000..a4627ca Binary files /dev/null and b/pytz/zoneinfo/US/Alaska differ diff --git a/pytz/zoneinfo/US/Aleutian b/pytz/zoneinfo/US/Aleutian new file mode 100644 index 0000000..b0a5dd6 Binary files /dev/null and b/pytz/zoneinfo/US/Aleutian differ diff --git a/pytz/zoneinfo/US/Arizona b/pytz/zoneinfo/US/Arizona new file mode 100644 index 0000000..adf2823 Binary files /dev/null and b/pytz/zoneinfo/US/Arizona differ diff --git a/pytz/zoneinfo/US/Central b/pytz/zoneinfo/US/Central new file mode 100644 index 0000000..3dd8f0f Binary files /dev/null and b/pytz/zoneinfo/US/Central differ diff --git a/pytz/zoneinfo/US/East-Indiana b/pytz/zoneinfo/US/East-Indiana new file mode 100644 index 0000000..4a92c06 Binary files /dev/null and b/pytz/zoneinfo/US/East-Indiana differ diff --git a/pytz/zoneinfo/US/Eastern b/pytz/zoneinfo/US/Eastern new file mode 100644 index 0000000..7553fee Binary files /dev/null and b/pytz/zoneinfo/US/Eastern differ diff --git a/pytz/zoneinfo/US/Hawaii b/pytz/zoneinfo/US/Hawaii new file mode 100644 index 0000000..bd85577 Binary files /dev/null and b/pytz/zoneinfo/US/Hawaii differ diff --git a/pytz/zoneinfo/US/Indiana-Starke b/pytz/zoneinfo/US/Indiana-Starke new file mode 100644 index 0000000..cc785da Binary files /dev/null and b/pytz/zoneinfo/US/Indiana-Starke differ diff --git a/pytz/zoneinfo/US/Michigan b/pytz/zoneinfo/US/Michigan new file mode 100644 index 0000000..a123b33 Binary files /dev/null and b/pytz/zoneinfo/US/Michigan differ diff --git a/pytz/zoneinfo/US/Mountain b/pytz/zoneinfo/US/Mountain new file mode 100644 index 0000000..7fc6691 Binary files /dev/null and b/pytz/zoneinfo/US/Mountain differ diff --git a/pytz/zoneinfo/US/Pacific b/pytz/zoneinfo/US/Pacific new file mode 100644 index 0000000..1fa9149 Binary files /dev/null and b/pytz/zoneinfo/US/Pacific differ diff --git a/pytz/zoneinfo/US/Pacific-New b/pytz/zoneinfo/US/Pacific-New new file mode 100644 index 0000000..1fa9149 Binary files /dev/null and b/pytz/zoneinfo/US/Pacific-New differ diff --git a/pytz/zoneinfo/US/Samoa b/pytz/zoneinfo/US/Samoa new file mode 100644 index 0000000..1d7649f Binary files /dev/null and b/pytz/zoneinfo/US/Samoa differ diff --git a/pytz/zoneinfo/UTC b/pytz/zoneinfo/UTC new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/UTC differ diff --git a/pytz/zoneinfo/Universal b/pytz/zoneinfo/Universal new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/Universal differ diff --git a/pytz/zoneinfo/W-SU b/pytz/zoneinfo/W-SU new file mode 100644 index 0000000..bdbbaeb Binary files /dev/null and b/pytz/zoneinfo/W-SU differ diff --git a/pytz/zoneinfo/WET b/pytz/zoneinfo/WET new file mode 100644 index 0000000..444a193 Binary files /dev/null and b/pytz/zoneinfo/WET differ diff --git a/pytz/zoneinfo/Zulu b/pytz/zoneinfo/Zulu new file mode 100644 index 0000000..c3b97f1 Binary files /dev/null and b/pytz/zoneinfo/Zulu 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 Binary files /dev/null and b/pytz/zoneinfo/localtime differ diff --git a/pytz/zoneinfo/posixrules b/pytz/zoneinfo/posixrules new file mode 100644 index 0000000..7553fee Binary files /dev/null and b/pytz/zoneinfo/posixrules 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', + ], + ) -- cgit v1.2.1