Index: pygeoip/timezone.py |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/pygeoip/timezone.py |
@@ -0,0 +1,760 @@ |
+# -*- coding: utf-8 -*- |
+""" |
+Time zone functions. Part of the pygeoip package. |
+ |
+@author: Jennifer Ennis <zaylea@gmail.com> |
+ |
+@license: Copyright(C) 2004 MaxMind LLC |
+ |
+This program is free software: you can redistribute it and/or modify |
+it under the terms of the GNU Lesser General Public License as published by |
+the Free Software Foundation, either version 3 of the License, or |
+(at your option) any later version. |
+ |
+This program is distributed in the hope that it will be useful, |
+but WITHOUT ANY WARRANTY; without even the implied warranty of |
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+GNU General Public License for more details. |
+ |
+You should have received a copy of the GNU Lesser General Public License |
+along with this program. If not, see <http://www.gnu.org/licenses/lgpl.txt>. |
+""" |
+ |
+__all__ = ['time_zone_by_country_and_region'] |
+ |
+_country = { |
+ 'AD': 'Europe/Andorra', |
+ 'AE': 'Asia/Dubai', |
+ 'AF': 'Asia/Kabul', |
+ 'AG': 'America/Antigua', |
+ 'AI': 'America/Anguilla', |
+ 'AL': 'Europe/Tirane', |
+ 'AM': 'Asia/Yerevan', |
+ 'AN': 'America/Curacao', |
+ 'AO': 'Africa/Luanda', |
+ 'AR': { |
+ '01': 'America/Argentina/Buenos_Aires', |
+ '02': 'America/Argentina/Catamarca', |
+ '03': 'America/Argentina/Tucuman', |
+ '04': 'America/Argentina/Rio_Gallegos', |
+ '05': 'America/Argentina/Cordoba', |
+ '06': 'America/Argentina/Tucuman', |
+ '07': 'America/Argentina/Buenos_Aires', |
+ '08': 'America/Argentina/Buenos_Aires', |
+ '09': 'America/Argentina/Tucuman', |
+ '10': 'America/Argentina/Jujuy', |
+ '11': 'America/Argentina/San_Luis', |
+ '12': 'America/Argentina/La_Rioja', |
+ '13': 'America/Argentina/Mendoza', |
+ '14': 'America/Argentina/Buenos_Aires', |
+ '15': 'America/Argentina/San_Luis', |
+ '16': 'America/Argentina/Buenos_Aires', |
+ '17': 'America/Argentina/Salta', |
+ '18': 'America/Argentina/San_Juan', |
+ '19': 'America/Argentina/San_Luis', |
+ '20': 'America/Argentina/Rio_Gallegos', |
+ '21': 'America/Argentina/Buenos_Aires', |
+ '22': 'America/Argentina/Catamarca', |
+ '23': 'America/Argentina/Ushuaia', |
+ '24': 'America/Argentina/Tucuman' |
+ }, |
+ 'AS': 'US/Samoa', |
+ 'AT': 'Europe/Vienna', |
+ 'AU': { |
+ '01': 'Australia/Canberra', |
+ '02': 'Australia/NSW', |
+ '03': 'Australia/North', |
+ '04': 'Australia/Queensland', |
+ '05': 'Australia/South', |
+ '06': 'Australia/Tasmania', |
+ '07': 'Australia/Victoria', |
+ '08': 'Australia/West' |
+ }, |
+ 'AW': 'America/Aruba', |
+ 'AX': 'Europe/Mariehamn', |
+ 'AZ': 'Asia/Baku', |
+ 'BA': 'Europe/Sarajevo', |
+ 'BB': 'America/Barbados', |
+ 'BD': 'Asia/Dhaka', |
+ 'BE': 'Europe/Brussels', |
+ 'BF': 'Africa/Ouagadougou', |
+ 'BG': 'Europe/Sofia', |
+ 'BH': 'Asia/Bahrain', |
+ 'BI': 'Africa/Bujumbura', |
+ 'BJ': 'Africa/Porto-Novo', |
+ 'BL': 'America/St_Barthelemy', |
+ 'BM': 'Atlantic/Bermuda', |
+ 'BN': 'Asia/Brunei', |
+ 'BO': 'America/La_Paz', |
+ 'BQ': 'America/Curacao', |
+ 'BR': { |
+ '01': 'America/Rio_Branco', |
+ '02': 'America/Maceio', |
+ '03': 'America/Sao_Paulo', |
+ '04': 'America/Manaus', |
+ '05': 'America/Bahia', |
+ '06': 'America/Fortaleza', |
+ '07': 'America/Sao_Paulo', |
+ '08': 'America/Sao_Paulo', |
+ '11': 'America/Campo_Grande', |
+ '13': 'America/Belem', |
+ '14': 'America/Cuiaba', |
+ '15': 'America/Sao_Paulo', |
+ '16': 'America/Belem', |
+ '17': 'America/Recife', |
+ '18': 'America/Sao_Paulo', |
+ '20': 'America/Fortaleza', |
+ '21': 'America/Sao_Paulo', |
+ '22': 'America/Recife', |
+ '23': 'America/Sao_Paulo', |
+ '24': 'America/Porto_Velho', |
+ '25': 'America/Boa_Vista', |
+ '26': 'America/Sao_Paulo', |
+ '27': 'America/Sao_Paulo', |
+ '28': 'America/Maceio', |
+ '29': 'America/Sao_Paulo', |
+ '30': 'America/Recife', |
+ '31': 'America/Araguaina' |
+ }, |
+ 'BS': 'America/Nassau', |
+ 'BT': 'Asia/Thimphu', |
+ 'BW': 'Africa/Gaborone', |
+ 'BY': 'Europe/Minsk', |
+ 'BZ': 'America/Belize', |
+ 'CA': { |
+ 'AB': 'America/Edmonton', |
+ 'BC': 'America/Vancouver', |
+ 'MB': 'America/Winnipeg', |
+ 'NB': 'America/Halifax', |
+ 'NL': 'America/St_Johns', |
+ 'NS': 'America/Halifax', |
+ 'NT': 'America/Yellowknife', |
+ 'NU': 'America/Rankin_Inlet', |
+ 'ON': 'America/Toronto', |
+ 'PE': 'America/Halifax', |
+ 'QC': 'America/Montreal', |
+ 'SK': 'America/Regina', |
+ 'YT': 'America/Whitehorse' |
+ }, |
+ 'CC': 'Indian/Cocos', |
+ 'CD': { |
+ '02': 'Africa/Kinshasa', |
+ '05': 'Africa/Lubumbashi', |
+ '06': 'Africa/Kinshasa', |
+ '08': 'Africa/Kinshasa', |
+ '10': 'Africa/Lubumbashi', |
+ '11': 'Africa/Lubumbashi', |
+ '12': 'Africa/Lubumbashi' |
+ }, |
+ 'CF': 'Africa/Bangui', |
+ 'CG': 'Africa/Brazzaville', |
+ 'CH': 'Europe/Zurich', |
+ 'CI': 'Africa/Abidjan', |
+ 'CK': 'Pacific/Rarotonga', |
+ 'CL': 'Chile/Continental', |
+ 'CM': 'Africa/Lagos', |
+ 'CN': { |
+ '01': 'Asia/Shanghai', |
+ '02': 'Asia/Shanghai', |
+ '03': 'Asia/Shanghai', |
+ '04': 'Asia/Shanghai', |
+ '05': 'Asia/Harbin', |
+ '06': 'Asia/Chongqing', |
+ '07': 'Asia/Shanghai', |
+ '08': 'Asia/Harbin', |
+ '09': 'Asia/Shanghai', |
+ '10': 'Asia/Shanghai', |
+ '11': 'Asia/Chongqing', |
+ '12': 'Asia/Shanghai', |
+ '13': 'Asia/Urumqi', |
+ '14': 'Asia/Chongqing', |
+ '15': 'Asia/Chongqing', |
+ '16': 'Asia/Chongqing', |
+ '18': 'Asia/Chongqing', |
+ '19': 'Asia/Harbin', |
+ '20': 'Asia/Harbin', |
+ '21': 'Asia/Chongqing', |
+ '22': 'Asia/Harbin', |
+ '23': 'Asia/Shanghai', |
+ '24': 'Asia/Chongqing', |
+ '25': 'Asia/Shanghai', |
+ '26': 'Asia/Chongqing', |
+ '28': 'Asia/Shanghai', |
+ '29': 'Asia/Chongqing', |
+ '30': 'Asia/Chongqing', |
+ '31': 'Asia/Chongqing', |
+ '32': 'Asia/Chongqing', |
+ '33': 'Asia/Chongqing' |
+ }, |
+ 'CO': 'America/Bogota', |
+ 'CR': 'America/Costa_Rica', |
+ 'CU': 'America/Havana', |
+ 'CV': 'Atlantic/Cape_Verde', |
+ 'CW': 'America/Curacao', |
+ 'CX': 'Indian/Christmas', |
+ 'CY': 'Asia/Nicosia', |
+ 'CZ': 'Europe/Prague', |
+ 'DE': 'Europe/Berlin', |
+ 'DJ': 'Africa/Djibouti', |
+ 'DK': 'Europe/Copenhagen', |
+ 'DM': 'America/Dominica', |
+ 'DO': 'America/Santo_Domingo', |
+ 'DZ': 'Africa/Algiers', |
+ 'EC': { |
+ '01': 'Pacific/Galapagos', |
+ '02': 'America/Guayaquil', |
+ '03': 'America/Guayaquil', |
+ '04': 'America/Guayaquil', |
+ '05': 'America/Guayaquil', |
+ '06': 'America/Guayaquil', |
+ '07': 'America/Guayaquil', |
+ '08': 'America/Guayaquil', |
+ '09': 'America/Guayaquil', |
+ '10': 'America/Guayaquil', |
+ '11': 'America/Guayaquil', |
+ '12': 'America/Guayaquil', |
+ '13': 'America/Guayaquil', |
+ '14': 'America/Guayaquil', |
+ '15': 'America/Guayaquil', |
+ '17': 'America/Guayaquil', |
+ '18': 'America/Guayaquil', |
+ '19': 'America/Guayaquil', |
+ '20': 'America/Guayaquil', |
+ '22': 'America/Guayaquil' |
+ }, |
+ 'EE': 'Europe/Tallinn', |
+ 'EG': 'Africa/Cairo', |
+ 'EH': 'Africa/El_Aaiun', |
+ 'ER': 'Africa/Asmera', |
+ 'ES': { |
+ '07': 'Europe/Madrid', |
+ '27': 'Europe/Madrid', |
+ '29': 'Europe/Madrid', |
+ '31': 'Europe/Madrid', |
+ '32': 'Europe/Madrid', |
+ '34': 'Europe/Madrid', |
+ '39': 'Europe/Madrid', |
+ '51': 'Africa/Ceuta', |
+ '52': 'Europe/Madrid', |
+ '53': 'Atlantic/Canary', |
+ '54': 'Europe/Madrid', |
+ '55': 'Europe/Madrid', |
+ '56': 'Europe/Madrid', |
+ '57': 'Europe/Madrid', |
+ '58': 'Europe/Madrid', |
+ '59': 'Europe/Madrid', |
+ '60': 'Europe/Madrid' |
+ }, |
+ 'ET': 'Africa/Addis_Ababa', |
+ 'FI': 'Europe/Helsinki', |
+ 'FJ': 'Pacific/Fiji', |
+ 'FK': 'Atlantic/Stanley', |
+ 'FO': 'Atlantic/Faeroe', |
+ 'FR': 'Europe/Paris', |
+ 'FX': 'Europe/Paris', |
+ 'GA': 'Africa/Libreville', |
+ 'GB': 'Europe/London', |
+ 'GD': 'America/Grenada', |
+ 'GE': 'Asia/Tbilisi', |
+ 'GF': 'America/Cayenne', |
+ 'GG': 'Europe/Guernsey', |
+ 'GH': 'Africa/Accra', |
+ 'GI': 'Europe/Gibraltar', |
+ 'GL': { |
+ '01': 'America/Thule', |
+ '02': 'America/Godthab', |
+ '03': 'America/Godthab' |
+ }, |
+ 'GM': 'Africa/Banjul', |
+ 'GN': 'Africa/Conakry', |
+ 'GP': 'America/Guadeloupe', |
+ 'GQ': 'Africa/Malabo', |
+ 'GR': 'Europe/Athens', |
+ 'GS': 'Atlantic/South_Georgia', |
+ 'GT': 'America/Guatemala', |
+ 'GU': 'Pacific/Guam', |
+ 'GW': 'Africa/Bissau', |
+ 'GY': 'America/Guyana', |
+ 'HK': 'Asia/Hong_Kong', |
+ 'HN': 'America/Tegucigalpa', |
+ 'HR': 'Europe/Zagreb', |
+ 'HT': 'America/Port-au-Prince', |
+ 'HU': 'Europe/Budapest', |
+ 'ID': { |
+ '01': 'Asia/Pontianak', |
+ '02': 'Asia/Makassar', |
+ '03': 'Asia/Jakarta', |
+ '04': 'Asia/Jakarta', |
+ '05': 'Asia/Jakarta', |
+ '06': 'Asia/Jakarta', |
+ '07': 'Asia/Jakarta', |
+ '08': 'Asia/Jakarta', |
+ '09': 'Asia/Jayapura', |
+ '10': 'Asia/Jakarta', |
+ '11': 'Asia/Pontianak', |
+ '12': 'Asia/Makassar', |
+ '13': 'Asia/Makassar', |
+ '14': 'Asia/Makassar', |
+ '15': 'Asia/Jakarta', |
+ '16': 'Asia/Makassar', |
+ '17': 'Asia/Makassar', |
+ '18': 'Asia/Makassar', |
+ '19': 'Asia/Pontianak', |
+ '20': 'Asia/Makassar', |
+ '21': 'Asia/Makassar', |
+ '22': 'Asia/Makassar', |
+ '23': 'Asia/Makassar', |
+ '24': 'Asia/Jakarta', |
+ '25': 'Asia/Pontianak', |
+ '26': 'Asia/Pontianak', |
+ '30': 'Asia/Jakarta', |
+ '31': 'Asia/Makassar', |
+ '33': 'Asia/Jakarta' |
+ }, |
+ 'IE': 'Europe/Dublin', |
+ 'IL': 'Asia/Jerusalem', |
+ 'IM': 'Europe/Isle_of_Man', |
+ 'IN': 'Asia/Calcutta', |
+ 'IO': 'Indian/Chagos', |
+ 'IQ': 'Asia/Baghdad', |
+ 'IR': 'Asia/Tehran', |
+ 'IS': 'Atlantic/Reykjavik', |
+ 'IT': 'Europe/Rome', |
+ 'JE': 'Europe/Jersey', |
+ 'JM': 'America/Jamaica', |
+ 'JO': 'Asia/Amman', |
+ 'JP': 'Asia/Tokyo', |
+ 'KE': 'Africa/Nairobi', |
+ 'KG': 'Asia/Bishkek', |
+ 'KH': 'Asia/Phnom_Penh', |
+ 'KI': 'Pacific/Tarawa', |
+ 'KM': 'Indian/Comoro', |
+ 'KN': 'America/St_Kitts', |
+ 'KP': 'Asia/Pyongyang', |
+ 'KR': 'Asia/Seoul', |
+ 'KW': 'Asia/Kuwait', |
+ 'KY': 'America/Cayman', |
+ 'KZ': { |
+ '01': 'Asia/Almaty', |
+ '02': 'Asia/Almaty', |
+ '03': 'Asia/Qyzylorda', |
+ '04': 'Asia/Aqtobe', |
+ '05': 'Asia/Qyzylorda', |
+ '06': 'Asia/Aqtau', |
+ '07': 'Asia/Oral', |
+ '08': 'Asia/Qyzylorda', |
+ '09': 'Asia/Aqtau', |
+ '10': 'Asia/Qyzylorda', |
+ '11': 'Asia/Almaty', |
+ '12': 'Asia/Qyzylorda', |
+ '13': 'Asia/Aqtobe', |
+ '14': 'Asia/Qyzylorda', |
+ '15': 'Asia/Almaty', |
+ '16': 'Asia/Aqtobe', |
+ '17': 'Asia/Almaty' |
+ }, |
+ 'LA': 'Asia/Vientiane', |
+ 'LB': 'Asia/Beirut', |
+ 'LC': 'America/St_Lucia', |
+ 'LI': 'Europe/Vaduz', |
+ 'LK': 'Asia/Colombo', |
+ 'LR': 'Africa/Monrovia', |
+ 'LS': 'Africa/Maseru', |
+ 'LT': 'Europe/Vilnius', |
+ 'LU': 'Europe/Luxembourg', |
+ 'LV': 'Europe/Riga', |
+ 'LY': 'Africa/Tripoli', |
+ 'MA': 'Africa/Casablanca', |
+ 'MC': 'Europe/Monaco', |
+ 'MD': 'Europe/Chisinau', |
+ 'ME': 'Europe/Podgorica', |
+ 'MF': 'America/Marigot', |
+ 'MG': 'Indian/Antananarivo', |
+ 'MK': 'Europe/Skopje', |
+ 'ML': 'Africa/Bamako', |
+ 'MM': 'Asia/Rangoon', |
+ 'MN': 'Asia/Choibalsan', |
+ 'MO': 'Asia/Macao', |
+ 'MP': 'Pacific/Saipan', |
+ 'MQ': 'America/Martinique', |
+ 'MR': 'Africa/Nouakchott', |
+ 'MS': 'America/Montserrat', |
+ 'MT': 'Europe/Malta', |
+ 'MU': 'Indian/Mauritius', |
+ 'MV': 'Indian/Maldives', |
+ 'MW': 'Africa/Blantyre', |
+ 'MX': { |
+ '01': 'America/Mexico_City', |
+ '02': 'America/Tijuana', |
+ '03': 'America/Hermosillo', |
+ '04': 'America/Merida', |
+ '05': 'America/Mexico_City', |
+ '06': 'America/Chihuahua', |
+ '07': 'America/Monterrey', |
+ '08': 'America/Mexico_City', |
+ '09': 'America/Mexico_City', |
+ '10': 'America/Mazatlan', |
+ '11': 'America/Mexico_City', |
+ '12': 'America/Mexico_City', |
+ '13': 'America/Mexico_City', |
+ '14': 'America/Mazatlan', |
+ '15': 'America/Chihuahua', |
+ '16': 'America/Mexico_City', |
+ '17': 'America/Mexico_City', |
+ '18': 'America/Mazatlan', |
+ '19': 'America/Monterrey', |
+ '20': 'America/Mexico_City', |
+ '21': 'America/Mexico_City', |
+ '22': 'America/Mexico_City', |
+ '23': 'America/Cancun', |
+ '24': 'America/Mexico_City', |
+ '25': 'America/Mazatlan', |
+ '26': 'America/Hermosillo', |
+ '27': 'America/Merida', |
+ '28': 'America/Monterrey', |
+ '29': 'America/Mexico_City', |
+ '30': 'America/Mexico_City', |
+ '31': 'America/Merida', |
+ '32': 'America/Monterrey' |
+ }, |
+ 'MY': { |
+ '01': 'Asia/Kuala_Lumpur', |
+ '02': 'Asia/Kuala_Lumpur', |
+ '03': 'Asia/Kuala_Lumpur', |
+ '04': 'Asia/Kuala_Lumpur', |
+ '05': 'Asia/Kuala_Lumpur', |
+ '06': 'Asia/Kuala_Lumpur', |
+ '07': 'Asia/Kuala_Lumpur', |
+ '08': 'Asia/Kuala_Lumpur', |
+ '09': 'Asia/Kuala_Lumpur', |
+ '11': 'Asia/Kuching', |
+ '12': 'Asia/Kuala_Lumpur', |
+ '13': 'Asia/Kuala_Lumpur', |
+ '14': 'Asia/Kuala_Lumpur', |
+ '15': 'Asia/Kuching', |
+ '16': 'Asia/Kuching' |
+ }, |
+ 'MZ': 'Africa/Maputo', |
+ 'NA': 'Africa/Windhoek', |
+ 'NC': 'Pacific/Noumea', |
+ 'NE': 'Africa/Niamey', |
+ 'NF': 'Pacific/Norfolk', |
+ 'NG': 'Africa/Lagos', |
+ 'NI': 'America/Managua', |
+ 'NL': 'Europe/Amsterdam', |
+ 'NO': 'Europe/Oslo', |
+ 'NP': 'Asia/Katmandu', |
+ 'NR': 'Pacific/Nauru', |
+ 'NU': 'Pacific/Niue', |
+ 'NZ': { |
+ '85': 'Pacific/Auckland', |
+ 'E7': 'Pacific/Auckland', |
+ 'E8': 'Pacific/Auckland', |
+ 'E9': 'Pacific/Auckland', |
+ 'F1': 'Pacific/Auckland', |
+ 'F2': 'Pacific/Auckland', |
+ 'F3': 'Pacific/Auckland', |
+ 'F4': 'Pacific/Auckland', |
+ 'F5': 'Pacific/Auckland', |
+ 'F7': 'Pacific/Chatham', |
+ 'F8': 'Pacific/Auckland', |
+ 'F9': 'Pacific/Auckland', |
+ 'G1': 'Pacific/Auckland', |
+ 'G2': 'Pacific/Auckland', |
+ 'G3': 'Pacific/Auckland' |
+ }, |
+ 'OM': 'Asia/Muscat', |
+ 'PA': 'America/Panama', |
+ 'PE': 'America/Lima', |
+ 'PF': 'Pacific/Marquesas', |
+ 'PG': 'Pacific/Port_Moresby', |
+ 'PH': 'Asia/Manila', |
+ 'PK': 'Asia/Karachi', |
+ 'PL': 'Europe/Warsaw', |
+ 'PM': 'America/Miquelon', |
+ 'PN': 'Pacific/Pitcairn', |
+ 'PR': 'America/Puerto_Rico', |
+ 'PS': 'Asia/Gaza', |
+ 'PT': { |
+ '02': 'Europe/Lisbon', |
+ '03': 'Europe/Lisbon', |
+ '04': 'Europe/Lisbon', |
+ '05': 'Europe/Lisbon', |
+ '06': 'Europe/Lisbon', |
+ '07': 'Europe/Lisbon', |
+ '08': 'Europe/Lisbon', |
+ '09': 'Europe/Lisbon', |
+ '10': 'Atlantic/Madeira', |
+ '11': 'Europe/Lisbon', |
+ '13': 'Europe/Lisbon', |
+ '14': 'Europe/Lisbon', |
+ '16': 'Europe/Lisbon', |
+ '17': 'Europe/Lisbon', |
+ '18': 'Europe/Lisbon', |
+ '19': 'Europe/Lisbon', |
+ '20': 'Europe/Lisbon', |
+ '21': 'Europe/Lisbon', |
+ '22': 'Europe/Lisbon' |
+ }, |
+ 'PW': 'Pacific/Palau', |
+ 'PY': 'America/Asuncion', |
+ 'QA': 'Asia/Qatar', |
+ 'RE': 'Indian/Reunion', |
+ 'RO': 'Europe/Bucharest', |
+ 'RS': 'Europe/Belgrade', |
+ 'RU': { |
+ '01': 'Europe/Volgograd', |
+ '02': 'Asia/Irkutsk', |
+ '03': 'Asia/Novokuznetsk', |
+ '04': 'Asia/Novosibirsk', |
+ '05': 'Asia/Vladivostok', |
+ '06': 'Europe/Moscow', |
+ '07': 'Europe/Volgograd', |
+ '08': 'Europe/Samara', |
+ '09': 'Europe/Moscow', |
+ '10': 'Europe/Moscow', |
+ '11': 'Asia/Irkutsk', |
+ '13': 'Asia/Yekaterinburg', |
+ '14': 'Asia/Irkutsk', |
+ '15': 'Asia/Anadyr', |
+ '16': 'Europe/Samara', |
+ '17': 'Europe/Volgograd', |
+ '18': 'Asia/Krasnoyarsk', |
+ '20': 'Asia/Irkutsk', |
+ '21': 'Europe/Moscow', |
+ '22': 'Europe/Volgograd', |
+ '23': 'Europe/Kaliningrad', |
+ '24': 'Europe/Volgograd', |
+ '25': 'Europe/Moscow', |
+ '26': 'Asia/Kamchatka', |
+ '27': 'Europe/Volgograd', |
+ '28': 'Europe/Moscow', |
+ '29': 'Asia/Novokuznetsk', |
+ '30': 'Asia/Vladivostok', |
+ '31': 'Asia/Krasnoyarsk', |
+ '32': 'Asia/Omsk', |
+ '33': 'Asia/Yekaterinburg', |
+ '34': 'Asia/Yekaterinburg', |
+ '35': 'Asia/Yekaterinburg', |
+ '36': 'Asia/Anadyr', |
+ '37': 'Europe/Moscow', |
+ '38': 'Europe/Volgograd', |
+ '39': 'Asia/Krasnoyarsk', |
+ '40': 'Asia/Yekaterinburg', |
+ '41': 'Europe/Moscow', |
+ '42': 'Europe/Moscow', |
+ '43': 'Europe/Moscow', |
+ '44': 'Asia/Magadan', |
+ '45': 'Europe/Samara', |
+ '46': 'Europe/Samara', |
+ '47': 'Europe/Moscow', |
+ '48': 'Europe/Moscow', |
+ '49': 'Europe/Moscow', |
+ '50': 'Asia/Yekaterinburg', |
+ '51': 'Europe/Moscow', |
+ '52': 'Europe/Moscow', |
+ '53': 'Asia/Novosibirsk', |
+ '54': 'Asia/Omsk', |
+ '55': 'Europe/Samara', |
+ '56': 'Europe/Moscow', |
+ '57': 'Europe/Samara', |
+ '58': 'Asia/Yekaterinburg', |
+ '59': 'Asia/Vladivostok', |
+ '60': 'Europe/Kaliningrad', |
+ '61': 'Europe/Volgograd', |
+ '62': 'Europe/Moscow', |
+ '63': 'Asia/Yakutsk', |
+ '64': 'Asia/Sakhalin', |
+ '65': 'Europe/Samara', |
+ '66': 'Europe/Moscow', |
+ '67': 'Europe/Samara', |
+ '68': 'Europe/Volgograd', |
+ '69': 'Europe/Moscow', |
+ '70': 'Europe/Volgograd', |
+ '71': 'Asia/Yekaterinburg', |
+ '72': 'Europe/Moscow', |
+ '73': 'Europe/Samara', |
+ '74': 'Asia/Krasnoyarsk', |
+ '75': 'Asia/Novosibirsk', |
+ '76': 'Europe/Moscow', |
+ '77': 'Europe/Moscow', |
+ '78': 'Asia/Yekaterinburg', |
+ '79': 'Asia/Irkutsk', |
+ '80': 'Asia/Yekaterinburg', |
+ '81': 'Europe/Samara', |
+ '82': 'Asia/Irkutsk', |
+ '83': 'Europe/Moscow', |
+ '84': 'Europe/Volgograd', |
+ '85': 'Europe/Moscow', |
+ '86': 'Europe/Moscow', |
+ '87': 'Asia/Novosibirsk', |
+ '88': 'Europe/Moscow', |
+ '89': 'Asia/Vladivostok' |
+ }, |
+ 'RW': 'Africa/Kigali', |
+ 'SA': 'Asia/Riyadh', |
+ 'SB': 'Pacific/Guadalcanal', |
+ 'SC': 'Indian/Mahe', |
+ 'SD': 'Africa/Khartoum', |
+ 'SE': 'Europe/Stockholm', |
+ 'SG': 'Asia/Singapore', |
+ 'SH': 'Atlantic/St_Helena', |
+ 'SI': 'Europe/Ljubljana', |
+ 'SJ': 'Arctic/Longyearbyen', |
+ 'SK': 'Europe/Bratislava', |
+ 'SL': 'Africa/Freetown', |
+ 'SM': 'Europe/San_Marino', |
+ 'SN': 'Africa/Dakar', |
+ 'SO': 'Africa/Mogadishu', |
+ 'SR': 'America/Paramaribo', |
+ 'SS': 'Africa/Juba', |
+ 'ST': 'Africa/Sao_Tome', |
+ 'SV': 'America/El_Salvador', |
+ 'SX': 'America/Curacao', |
+ 'SY': 'Asia/Damascus', |
+ 'SZ': 'Africa/Mbabane', |
+ 'TC': 'America/Grand_Turk', |
+ 'TD': 'Africa/Ndjamena', |
+ 'TF': 'Indian/Kerguelen', |
+ 'TG': 'Africa/Lome', |
+ 'TH': 'Asia/Bangkok', |
+ 'TJ': 'Asia/Dushanbe', |
+ 'TK': 'Pacific/Fakaofo', |
+ 'TL': 'Asia/Dili', |
+ 'TM': 'Asia/Ashgabat', |
+ 'TN': 'Africa/Tunis', |
+ 'TO': 'Pacific/Tongatapu', |
+ 'TR': 'Asia/Istanbul', |
+ 'TT': 'America/Port_of_Spain', |
+ 'TV': 'Pacific/Funafuti', |
+ 'TW': 'Asia/Taipei', |
+ 'TZ': 'Africa/Dar_es_Salaam', |
+ 'UA': { |
+ '01': 'Europe/Kiev', |
+ '02': 'Europe/Kiev', |
+ '03': 'Europe/Uzhgorod', |
+ '04': 'Europe/Zaporozhye', |
+ '05': 'Europe/Zaporozhye', |
+ '06': 'Europe/Uzhgorod', |
+ '07': 'Europe/Zaporozhye', |
+ '08': 'Europe/Simferopol', |
+ '09': 'Europe/Kiev', |
+ '10': 'Europe/Zaporozhye', |
+ '11': 'Europe/Simferopol', |
+ '13': 'Europe/Kiev', |
+ '14': 'Europe/Zaporozhye', |
+ '15': 'Europe/Uzhgorod', |
+ '16': 'Europe/Zaporozhye', |
+ '17': 'Europe/Simferopol', |
+ '18': 'Europe/Zaporozhye', |
+ '19': 'Europe/Kiev', |
+ '20': 'Europe/Simferopol', |
+ '21': 'Europe/Kiev', |
+ '22': 'Europe/Uzhgorod', |
+ '23': 'Europe/Kiev', |
+ '24': 'Europe/Uzhgorod', |
+ '25': 'Europe/Uzhgorod', |
+ '26': 'Europe/Zaporozhye', |
+ '27': 'Europe/Kiev' |
+ }, |
+ 'UG': 'Africa/Kampala', |
+ 'US': { |
+ 'AK': 'America/Anchorage', |
+ 'AL': 'America/Chicago', |
+ 'AR': 'America/Chicago', |
+ 'AZ': 'America/Phoenix', |
+ 'CA': 'America/Los_Angeles', |
+ 'CO': 'America/Denver', |
+ 'CT': 'America/New_York', |
+ 'DC': 'America/New_York', |
+ 'DE': 'America/New_York', |
+ 'FL': 'America/New_York', |
+ 'GA': 'America/New_York', |
+ 'HI': 'Pacific/Honolulu', |
+ 'IA': 'America/Chicago', |
+ 'ID': 'America/Denver', |
+ 'IL': 'America/Chicago', |
+ 'IN': 'America/Indianapolis', |
+ 'KS': 'America/Chicago', |
+ 'KY': 'America/New_York', |
+ 'LA': 'America/Chicago', |
+ 'MA': 'America/New_York', |
+ 'MD': 'America/New_York', |
+ 'ME': 'America/New_York', |
+ 'MI': 'America/New_York', |
+ 'MN': 'America/Chicago', |
+ 'MO': 'America/Chicago', |
+ 'MS': 'America/Chicago', |
+ 'MT': 'America/Denver', |
+ 'NC': 'America/New_York', |
+ 'ND': 'America/Chicago', |
+ 'NE': 'America/Chicago', |
+ 'NH': 'America/New_York', |
+ 'NJ': 'America/New_York', |
+ 'NM': 'America/Denver', |
+ 'NV': 'America/Los_Angeles', |
+ 'NY': 'America/New_York', |
+ 'OH': 'America/New_York', |
+ 'OK': 'America/Chicago', |
+ 'OR': 'America/Los_Angeles', |
+ 'PA': 'America/New_York', |
+ 'RI': 'America/New_York', |
+ 'SC': 'America/New_York', |
+ 'SD': 'America/Chicago', |
+ 'TN': 'America/Chicago', |
+ 'TX': 'America/Chicago', |
+ 'UT': 'America/Denver', |
+ 'VA': 'America/New_York', |
+ 'VT': 'America/New_York', |
+ 'WA': 'America/Los_Angeles', |
+ 'WI': 'America/Chicago', |
+ 'WV': 'America/New_York', |
+ 'WY': 'America/Denver' |
+ }, |
+ 'UY': 'America/Montevideo', |
+ 'UZ': { |
+ '01': 'Asia/Tashkent', |
+ '02': 'Asia/Samarkand', |
+ '03': 'Asia/Tashkent', |
+ '06': 'Asia/Tashkent', |
+ '07': 'Asia/Samarkand', |
+ '08': 'Asia/Samarkand', |
+ '09': 'Asia/Samarkand', |
+ '10': 'Asia/Samarkand', |
+ '12': 'Asia/Samarkand', |
+ '13': 'Asia/Tashkent', |
+ '14': 'Asia/Tashkent' |
+ }, |
+ 'VA': 'Europe/Vatican', |
+ 'VC': 'America/St_Vincent', |
+ 'VE': 'America/Caracas', |
+ 'VG': 'America/Tortola', |
+ 'VI': 'America/St_Thomas', |
+ 'VN': 'Asia/Phnom_Penh', |
+ 'VU': 'Pacific/Efate', |
+ 'WF': 'Pacific/Wallis', |
+ 'WS': 'Pacific/Samoa', |
+ 'YE': 'Asia/Aden', |
+ 'YT': 'Indian/Mayotte', |
+ 'YU': 'Europe/Belgrade', |
+ 'ZA': 'Africa/Johannesburg', |
+ 'ZM': 'Africa/Lusaka', |
+ 'ZW': 'Africa/Harare' |
+ } |
+ |
+ |
+def time_zone_by_country_and_region(country_code, region_name=None): |
+ if country_code not in _country: |
+ return '' |
+ |
+ if not region_name or region_name == '00': |
+ region_name = None |
+ |
+ timezones = _country[country_code] |
+ if isinstance(timezones, str): |
+ return timezones |
+ |
+ if not region_name: |
+ return '' |
+ |
+ return timezones.get(region_name) |