# see: https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml # def extract_timezones(file_path: str) -> dict[str, str]: # """Extract all timezones from the XML file where territory is equal to '001'.""" # # e.g. extract_timezones(windows_zones.xml) # import defusedxml.ElementTree as ET # tree = ET.parse(file_path) # root = tree.getroot() # timezones = {} # for mapZone in root.findall(".//mapZone[@territory='001']"): # timezones[mapZone.get("other")] = mapZone.get("type") # return timezones WINDOWS_TO_IANA_APAC = { "Hawaiian Standard Time": "Pacific/Honolulu", "Marquesas Standard Time": "Pacific/Marquesas", "Easter Island Standard Time": "Pacific/Easter", "W. Australia Standard Time": "Australia/Perth", "Aus Central W. Standard Time": "Australia/Eucla", "Cen. Australia Standard Time": "Australia/Adelaide", "AUS Central Standard Time": "Australia/Darwin", "E. Australia Standard Time": "Australia/Brisbane", "AUS Eastern Standard Time": "Australia/Sydney", "West Pacific Standard Time": "Pacific/Port_Moresby", "Tasmania Standard Time": "Australia/Hobart", "Lord Howe Standard Time": "Australia/Lord_Howe", "Bougainville Standard Time": "Pacific/Bougainville", "Norfolk Standard Time": "Pacific/Norfolk", "Central Pacific Standard Time": "Pacific/Guadalcanal", "New Zealand Standard Time": "Pacific/Auckland", "Fiji Standard Time": "Pacific/Fiji", "Chatham Islands Standard Time": "Pacific/Chatham", "Tonga Standard Time": "Pacific/Tongatapu", "Samoa Standard Time": "Pacific/Apia", "Line Islands Standard Time": "Pacific/Kiritimati", } WINDOWS_TO_IANA_ASIA = { "Jordan Standard Time": "Asia/Amman", "Middle East Standard Time": "Asia/Beirut", "Syria Standard Time": "Asia/Damascus", "West Bank Standard Time": "Asia/Hebron", "Israel Standard Time": "Asia/Jerusalem", "Arabic Standard Time": "Asia/Baghdad", "Arab Standard Time": "Asia/Riyadh", "Iran Standard Time": "Asia/Tehran", "Arabian Standard Time": "Asia/Dubai", "Azerbaijan Standard Time": "Asia/Baku", "Georgian Standard Time": "Asia/Tbilisi", "Caucasus Standard Time": "Asia/Yerevan", "Afghanistan Standard Time": "Asia/Kabul", "West Asia Standard Time": "Asia/Tashkent", "Ekaterinburg Standard Time": "Asia/Yekaterinburg", "Pakistan Standard Time": "Asia/Karachi", "Qyzylorda Standard Time": "Asia/Qyzylorda", "India Standard Time": "Asia/Calcutta", "Sri Lanka Standard Time": "Asia/Colombo", "Nepal Standard Time": "Asia/Katmandu", "Central Asia Standard Time": "Asia/Bishkek", "Bangladesh Standard Time": "Asia/Dhaka", "Omsk Standard Time": "Asia/Omsk", "Myanmar Standard Time": "Asia/Rangoon", "SE Asia Standard Time": "Asia/Bangkok", "Altai Standard Time": "Asia/Barnaul", "W. Mongolia Standard Time": "Asia/Hovd", "North Asia Standard Time": "Asia/Krasnoyarsk", "N. Central Asia Standard Time": "Asia/Novosibirsk", "Tomsk Standard Time": "Asia/Tomsk", "China Standard Time": "Asia/Shanghai", "North Asia East Standard Time": "Asia/Irkutsk", "Singapore Standard Time": "Asia/Singapore", "Taipei Standard Time": "Asia/Taipei", "Ulaanbaatar Standard Time": "Asia/Ulaanbaatar", "Transbaikal Standard Time": "Asia/Chita", "Tokyo Standard Time": "Asia/Tokyo", "North Korea Standard Time": "Asia/Pyongyang", "Korea Standard Time": "Asia/Seoul", "Yakutsk Standard Time": "Asia/Yakutsk", "Vladivostok Standard Time": "Asia/Vladivostok", "Russia Time Zone 10": "Asia/Srednekolymsk", "Magadan Standard Time": "Asia/Magadan", "Sakhalin Standard Time": "Asia/Sakhalin", "Russia Time Zone 11": "Asia/Kamchatka", } WINDOWS_TO_IANA_NASA = { "Aleutian Standard Time": "America/Adak", "Alaskan Standard Time": "America/Anchorage", "Pacific Standard Time (Mexico)": "America/Tijuana", "Pacific Standard Time": "America/Los_Angeles", "US Mountain Standard Time": "America/Phoenix", "Mountain Standard Time (Mexico)": "America/Mazatlan", "Mountain Standard Time": "America/Denver", "Yukon Standard Time": "America/Whitehorse", "Central America Standard Time": "America/Guatemala", "Central Standard Time": "America/Chicago", "Central Standard Time (Mexico)": "America/Mexico_City", "Canada Central Standard Time": "America/Regina", "SA Pacific Standard Time": "America/Bogota", "Eastern Standard Time (Mexico)": "America/Cancun", "Eastern Standard Time": "America/New_York", "Haiti Standard Time": "America/Port-au-Prince", "Cuba Standard Time": "America/Havana", "US Eastern Standard Time": "America/Indianapolis", "Turks And Caicos Standard Time": "America/Grand_Turk", "Paraguay Standard Time": "America/Asuncion", "Atlantic Standard Time": "America/Halifax", "Venezuela Standard Time": "America/Caracas", "Central Brazilian Standard Time": "America/Cuiaba", "SA Western Standard Time": "America/La_Paz", "Pacific SA Standard Time": "America/Santiago", "Newfoundland Standard Time": "America/St_Johns", "Tocantins Standard Time": "America/Araguaina", "E. South America Standard Time": "America/Sao_Paulo", "SA Eastern Standard Time": "America/Cayenne", "Argentina Standard Time": "America/Buenos_Aires", "Greenland Standard Time": "America/Godthab", "Montevideo Standard Time": "America/Montevideo", "Magallanes Standard Time": "America/Punta_Arenas", "Saint Pierre Standard Time": "America/Miquelon", "Bahia Standard Time": "America/Bahia", } WINDOWS_TO_IANA_EMEA = { "Azores Standard Time": "Atlantic/Azores", "Cape Verde Standard Time": "Atlantic/Cape_Verde", "GMT Standard Time": "Europe/London", "Greenwich Standard Time": "Atlantic/Reykjavik", "Sao Tome Standard Time": "Africa/Sao_Tome", "Morocco Standard Time": "Africa/Casablanca", "W. Europe Standard Time": "Europe/Berlin", "Central Europe Standard Time": "Europe/Budapest", "Romance Standard Time": "Europe/Paris", "Central European Standard Time": "Europe/Warsaw", "W. Central Africa Standard Time": "Africa/Lagos", "GTB Standard Time": "Europe/Bucharest", "Egypt Standard Time": "Africa/Cairo", "E. Europe Standard Time": "Europe/Chisinau", "South Africa Standard Time": "Africa/Johannesburg", "FLE Standard Time": "Europe/Kiev", "South Sudan Standard Time": "Africa/Juba", "Kaliningrad Standard Time": "Europe/Kaliningrad", "Sudan Standard Time": "Africa/Khartoum", "Libya Standard Time": "Africa/Tripoli", "Namibia Standard Time": "Africa/Windhoek", "Turkey Standard Time": "Europe/Istanbul", "Belarus Standard Time": "Europe/Minsk", "Russian Standard Time": "Europe/Moscow", "E. Africa Standard Time": "Africa/Nairobi", "Astrakhan Standard Time": "Europe/Astrakhan", "Russia Time Zone 3": "Europe/Samara", "Mauritius Standard Time": "Indian/Mauritius", "Saratov Standard Time": "Europe/Saratov", "Volgograd Standard Time": "Europe/Volgograd", } WINDOWS_TO_IANA_LOOKUP = { k.replace(" ", "").replace(".", ""): v for k, v in ( WINDOWS_TO_IANA_APAC | WINDOWS_TO_IANA_ASIA | WINDOWS_TO_IANA_EMEA | WINDOWS_TO_IANA_NASA ).items() }