[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/excorporate 3343810 1/2: Implement time zone conversion
From: |
Thomas Fitzsimmons |
Subject: |
[elpa] externals/excorporate 3343810 1/2: Implement time zone conversion function |
Date: |
Sat, 3 Apr 2021 20:30:07 -0400 (EDT) |
branch: externals/excorporate
commit 33438100688ee58db2a0350950338e309dbd3df1
Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
Commit: Thomas Fitzsimmons <fitzsim@fitzsim.org>
Implement time zone conversion function
* excorporate-time-zones.el: New file.
---
excorporate-time-zones.el | 866 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 866 insertions(+)
diff --git a/excorporate-time-zones.el b/excorporate-time-zones.el
new file mode 100644
index 0000000..0a2cd80
--- /dev/null
+++ b/excorporate-time-zones.el
@@ -0,0 +1,866 @@
+;;; excorporate-time-zones.el --- time zone conversion *- lexical-binding: t
-*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
+;; Keywords: calendar
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU 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 General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Hash tables and functions that map (current-time-zone) values to
+;; time zone names recognized by Exchange servers.
+
+;; For example:
+;; (current-time-zone) => (-14400 "EDT")
+;; (exco-time-zone) => "Eastern Standard Time"
+
+;;; Code:
+
+;; Generated with:
+
+;;(insert
+;; (concat "(defvar exco--time-zone-olson-to-server "
+;; (with-current-buffer
+;; (url-retrieve-synchronously
+;; (concat "https://raw.githubusercontent.com/unicode-org/cldr/"
+;; "master/common/supplemental/windowsZones.xml"))
+;; (goto-char (point-min))
+;; (search-forward-regexp "^<!DOC")
+;; (move-beginning-of-line nil)
+;; (delete-region (point-min) (point))
+;; (let ((table (make-hash-table :test #'equal))
+;; (zone-lines
+;; (nth 3 (nth 5 (car (xml-parse-region
+;; (point-min) (point-max)))))))
+;; (dolist (zone-line zone-lines)
+;; (when (and (listp zone-line) (equal (car zone-line) 'mapZone))
+;; (let ((names (split-string
+;; (cdaddr (car (cdr zone-line))) " "))
+;; (zone (cdaar (cdr zone-line))))
+;; (dolist (name names)
+;; (puthash name zone table)))))
+;; (format "%S" table)))
+;; " \"A hash table mapping IANA/Olson time zone"
+;; " names to server time zone names.\")"))
+
+(defvar exco--time-zone-olson-to-server
+ #s(hash-table
+ size 487
+ test equal
+ rehash-size 1.5
+ rehash-threshold 0.8125
+ data
+ ("Etc/GMT+12" "Dateline Standard Time"
+ "Etc/GMT+11" "UTC-11"
+ "Pacific/Pago_Pago" "UTC-11"
+ "Pacific/Niue" "UTC-11"
+ "Pacific/Midway" "UTC-11"
+ "America/Adak" "Aleutian Standard Time"
+ "Pacific/Honolulu" "Hawaiian Standard Time"
+ "Pacific/Rarotonga" "Hawaiian Standard Time"
+ "Pacific/Tahiti" "Hawaiian Standard Time"
+ "Pacific/Johnston" "Hawaiian Standard Time"
+ "Etc/GMT+10" "Hawaiian Standard Time"
+ "Pacific/Marquesas" "Marquesas Standard Time"
+ "America/Anchorage" "Alaskan Standard Time"
+ "America/Juneau" "Alaskan Standard Time"
+ "America/Metlakatla" "Alaskan Standard Time"
+ "America/Nome" "Alaskan Standard Time"
+ "America/Sitka" "Alaskan Standard Time"
+ "America/Yakutat" "Alaskan Standard Time"
+ "Etc/GMT+9" "UTC-09"
+ "Pacific/Gambier" "UTC-09"
+ "America/Tijuana" "Pacific Standard Time (Mexico)"
+ "America/Santa_Isabel" "Pacific Standard Time (Mexico)"
+ "Etc/GMT+8" "UTC-08"
+ "Pacific/Pitcairn" "UTC-08"
+ "America/Los_Angeles" "Pacific Standard Time"
+ "America/Vancouver" "Pacific Standard Time"
+ "PST8PDT" "Pacific Standard Time"
+ "America/Phoenix" "US Mountain Standard Time"
+ "America/Creston" "US Mountain Standard Time"
+ "America/Dawson_Creek" "US Mountain Standard Time"
+ "America/Fort_Nelson" "US Mountain Standard Time"
+ "America/Hermosillo" "US Mountain Standard Time"
+ "Etc/GMT+7" "US Mountain Standard Time"
+ "America/Chihuahua" "Mountain Standard Time (Mexico)"
+ "America/Mazatlan" "Mountain Standard Time (Mexico)"
+ "America/Denver" "Mountain Standard Time"
+ "America/Edmonton" "Mountain Standard Time"
+ "America/Cambridge_Bay" "Mountain Standard Time"
+ "America/Inuvik" "Mountain Standard Time"
+ "America/Yellowknife" "Mountain Standard Time"
+ "America/Ojinaga" "Mountain Standard Time"
+ "America/Boise" "Mountain Standard Time"
+ "MST7MDT" "Mountain Standard Time"
+ "America/Whitehorse" "Yukon Standard Time"
+ "America/Dawson" "Yukon Standard Time"
+ "America/Guatemala" "Central America Standard Time"
+ "America/Belize" "Central America Standard Time"
+ "America/Costa_Rica" "Central America Standard Time"
+ "Pacific/Galapagos" "Central America Standard Time"
+ "America/Tegucigalpa" "Central America Standard Time"
+ "America/Managua" "Central America Standard Time"
+ "America/El_Salvador" "Central America Standard Time"
+ "Etc/GMT+6" "Central America Standard Time"
+ "America/Chicago" "Central Standard Time"
+ "America/Winnipeg" "Central Standard Time"
+ "America/Rainy_River" "Central Standard Time"
+ "America/Rankin_Inlet" "Central Standard Time"
+ "America/Resolute" "Central Standard Time"
+ "America/Matamoros" "Central Standard Time"
+ "America/Indiana/Knox" "Central Standard Time"
+ "America/Indiana/Tell_City" "Central Standard Time"
+ "America/Menominee" "Central Standard Time"
+ "America/North_Dakota/Beulah" "Central Standard Time"
+ "America/North_Dakota/Center" "Central Standard Time"
+ "America/North_Dakota/New_Salem" "Central Standard Time"
+ "CST6CDT" "Central Standard Time"
+ "Pacific/Easter" "Easter Island Standard Time"
+ "America/Mexico_City" "Central Standard Time (Mexico)"
+ "America/Bahia_Banderas" "Central Standard Time (Mexico)"
+ "America/Merida" "Central Standard Time (Mexico)"
+ "America/Monterrey" "Central Standard Time (Mexico)"
+ "America/Regina" "Canada Central Standard Time"
+ "America/Swift_Current" "Canada Central Standard Time"
+ "America/Bogota" "SA Pacific Standard Time"
+ "America/Rio_Branco" "SA Pacific Standard Time"
+ "America/Eirunepe" "SA Pacific Standard Time"
+ "America/Coral_Harbour" "SA Pacific Standard Time"
+ "America/Guayaquil" "SA Pacific Standard Time"
+ "America/Jamaica" "SA Pacific Standard Time"
+ "America/Cayman" "SA Pacific Standard Time"
+ "America/Panama" "SA Pacific Standard Time"
+ "America/Lima" "SA Pacific Standard Time"
+ "Etc/GMT+5" "SA Pacific Standard Time"
+ "America/Cancun" "Eastern Standard Time (Mexico)"
+ "America/New_York" "Eastern Standard Time"
+ "America/Nassau" "Eastern Standard Time"
+ "America/Toronto" "Eastern Standard Time"
+ "America/Iqaluit" "Eastern Standard Time"
+ "America/Montreal" "Eastern Standard Time"
+ "America/Nipigon" "Eastern Standard Time"
+ "America/Pangnirtung" "Eastern Standard Time"
+ "America/Thunder_Bay" "Eastern Standard Time"
+ "America/Detroit" "Eastern Standard Time"
+ "America/Indiana/Petersburg" "Eastern Standard Time"
+ "America/Indiana/Vincennes" "Eastern Standard Time"
+ "America/Indiana/Winamac" "Eastern Standard Time"
+ "America/Kentucky/Monticello" "Eastern Standard Time"
+ "America/Louisville" "Eastern Standard Time"
+ "EST5EDT" "Eastern Standard Time"
+ "America/Port-au-Prince" "Haiti Standard Time"
+ "America/Havana" "Cuba Standard Time"
+ "America/Indianapolis" "US Eastern Standard Time"
+ "America/Indiana/Marengo" "US Eastern Standard Time"
+ "America/Indiana/Vevay" "US Eastern Standard Time"
+ "America/Grand_Turk" "Turks And Caicos Standard Time"
+ "America/Asuncion" "Paraguay Standard Time"
+ "America/Halifax" "Atlantic Standard Time"
+ "Atlantic/Bermuda" "Atlantic Standard Time"
+ "America/Glace_Bay" "Atlantic Standard Time"
+ "America/Goose_Bay" "Atlantic Standard Time"
+ "America/Moncton" "Atlantic Standard Time"
+ "America/Thule" "Atlantic Standard Time"
+ "America/Caracas" "Venezuela Standard Time"
+ "America/Cuiaba" "Central Brazilian Standard Time"
+ "America/Campo_Grande" "Central Brazilian Standard Time"
+ "America/La_Paz" "SA Western Standard Time"
+ "America/Antigua" "SA Western Standard Time"
+ "America/Anguilla" "SA Western Standard Time"
+ "America/Aruba" "SA Western Standard Time"
+ "America/Barbados" "SA Western Standard Time"
+ "America/St_Barthelemy" "SA Western Standard Time"
+ "America/Kralendijk" "SA Western Standard Time"
+ "America/Manaus" "SA Western Standard Time"
+ "America/Boa_Vista" "SA Western Standard Time"
+ "America/Porto_Velho" "SA Western Standard Time"
+ "America/Blanc-Sablon" "SA Western Standard Time"
+ "America/Curacao" "SA Western Standard Time"
+ "America/Dominica" "SA Western Standard Time"
+ "America/Santo_Domingo" "SA Western Standard Time"
+ "America/Grenada" "SA Western Standard Time"
+ "America/Guadeloupe" "SA Western Standard Time"
+ "America/Guyana" "SA Western Standard Time"
+ "America/St_Kitts" "SA Western Standard Time"
+ "America/St_Lucia" "SA Western Standard Time"
+ "America/Marigot" "SA Western Standard Time"
+ "America/Martinique" "SA Western Standard Time"
+ "America/Montserrat" "SA Western Standard Time"
+ "America/Puerto_Rico" "SA Western Standard Time"
+ "America/Lower_Princes" "SA Western Standard Time"
+ "America/Port_of_Spain" "SA Western Standard Time"
+ "America/St_Vincent" "SA Western Standard Time"
+ "America/Tortola" "SA Western Standard Time"
+ "America/St_Thomas" "SA Western Standard Time"
+ "Etc/GMT+4" "SA Western Standard Time"
+ "America/Santiago" "Pacific SA Standard Time"
+ "America/St_Johns" "Newfoundland Standard Time"
+ "America/Araguaina" "Tocantins Standard Time"
+ "America/Sao_Paulo" "E. South America Standard Time"
+ "America/Cayenne" "SA Eastern Standard Time"
+ "Antarctica/Rothera" "SA Eastern Standard Time"
+ "Antarctica/Palmer" "SA Eastern Standard Time"
+ "America/Fortaleza" "SA Eastern Standard Time"
+ "America/Belem" "SA Eastern Standard Time"
+ "America/Maceio" "SA Eastern Standard Time"
+ "America/Recife" "SA Eastern Standard Time"
+ "America/Santarem" "SA Eastern Standard Time"
+ "Atlantic/Stanley" "SA Eastern Standard Time"
+ "America/Paramaribo" "SA Eastern Standard Time"
+ "Etc/GMT+3" "SA Eastern Standard Time"
+ "America/Buenos_Aires" "Argentina Standard Time"
+ "America/Argentina/La_Rioja" "Argentina Standard Time"
+ "America/Argentina/Rio_Gallegos" "Argentina Standard Time"
+ "America/Argentina/Salta" "Argentina Standard Time"
+ "America/Argentina/San_Juan" "Argentina Standard Time"
+ "America/Argentina/San_Luis" "Argentina Standard Time"
+ "America/Argentina/Tucuman" "Argentina Standard Time"
+ "America/Argentina/Ushuaia" "Argentina Standard Time"
+ "America/Catamarca" "Argentina Standard Time"
+ "America/Cordoba" "Argentina Standard Time"
+ "America/Jujuy" "Argentina Standard Time"
+ "America/Mendoza" "Argentina Standard Time"
+ "America/Godthab" "Greenland Standard Time"
+ "America/Montevideo" "Montevideo Standard Time"
+ "America/Punta_Arenas" "Magallanes Standard Time"
+ "America/Miquelon" "Saint Pierre Standard Time"
+ "America/Bahia" "Bahia Standard Time"
+ "Etc/GMT+2" "UTC-02"
+ "America/Noronha" "UTC-02"
+ "Atlantic/South_Georgia" "UTC-02"
+ "Atlantic/Azores" "Azores Standard Time"
+ "America/Scoresbysund" "Azores Standard Time"
+ "Atlantic/Cape_Verde" "Cape Verde Standard Time"
+ "Etc/GMT+1" "Cape Verde Standard Time"
+ "Etc/GMT" "UTC"
+ "America/Danmarkshavn" "UTC"
+ "Etc/UTC" "UTC"
+ "Europe/London" "GMT Standard Time"
+ "Atlantic/Canary" "GMT Standard Time"
+ "Atlantic/Faeroe" "GMT Standard Time"
+ "Europe/Guernsey" "GMT Standard Time"
+ "Europe/Dublin" "GMT Standard Time"
+ "Europe/Isle_of_Man" "GMT Standard Time"
+ "Europe/Jersey" "GMT Standard Time"
+ "Europe/Lisbon" "GMT Standard Time"
+ "Atlantic/Madeira" "GMT Standard Time"
+ "Atlantic/Reykjavik" "Greenwich Standard Time"
+ "Africa/Ouagadougou" "Greenwich Standard Time"
+ "Africa/Abidjan" "Greenwich Standard Time"
+ "Africa/Accra" "Greenwich Standard Time"
+ "Africa/Banjul" "Greenwich Standard Time"
+ "Africa/Conakry" "Greenwich Standard Time"
+ "Africa/Bissau" "Greenwich Standard Time"
+ "Africa/Monrovia" "Greenwich Standard Time"
+ "Africa/Bamako" "Greenwich Standard Time"
+ "Africa/Nouakchott" "Greenwich Standard Time"
+ "Atlantic/St_Helena" "Greenwich Standard Time"
+ "Africa/Freetown" "Greenwich Standard Time"
+ "Africa/Dakar" "Greenwich Standard Time"
+ "Africa/Lome" "Greenwich Standard Time"
+ "Africa/Sao_Tome" "Sao Tome Standard Time"
+ "Africa/Casablanca" "Morocco Standard Time"
+ "Africa/El_Aaiun" "Morocco Standard Time"
+ "Europe/Berlin" "W. Europe Standard Time"
+ "Europe/Andorra" "W. Europe Standard Time"
+ "Europe/Vienna" "W. Europe Standard Time"
+ "Europe/Zurich" "W. Europe Standard Time"
+ "Europe/Busingen" "W. Europe Standard Time"
+ "Europe/Gibraltar" "W. Europe Standard Time"
+ "Europe/Rome" "W. Europe Standard Time"
+ "Europe/Vaduz" "W. Europe Standard Time"
+ "Europe/Luxembourg" "W. Europe Standard Time"
+ "Europe/Monaco" "W. Europe Standard Time"
+ "Europe/Malta" "W. Europe Standard Time"
+ "Europe/Amsterdam" "W. Europe Standard Time"
+ "Europe/Oslo" "W. Europe Standard Time"
+ "Europe/Stockholm" "W. Europe Standard Time"
+ "Arctic/Longyearbyen" "W. Europe Standard Time"
+ "Europe/San_Marino" "W. Europe Standard Time"
+ "Europe/Vatican" "W. Europe Standard Time"
+ "Europe/Budapest" "Central Europe Standard Time"
+ "Europe/Tirane" "Central Europe Standard Time"
+ "Europe/Prague" "Central Europe Standard Time"
+ "Europe/Podgorica" "Central Europe Standard Time"
+ "Europe/Belgrade" "Central Europe Standard Time"
+ "Europe/Ljubljana" "Central Europe Standard Time"
+ "Europe/Bratislava" "Central Europe Standard Time"
+ "Europe/Paris" "Romance Standard Time"
+ "Europe/Brussels" "Romance Standard Time"
+ "Europe/Copenhagen" "Romance Standard Time"
+ "Europe/Madrid" "Romance Standard Time"
+ "Africa/Ceuta" "Romance Standard Time"
+ "Europe/Warsaw" "Central European Standard Time"
+ "Europe/Sarajevo" "Central European Standard Time"
+ "Europe/Zagreb" "Central European Standard Time"
+ "Europe/Skopje" "Central European Standard Time"
+ "Africa/Lagos" "W. Central Africa Standard Time"
+ "Africa/Luanda" "W. Central Africa Standard Time"
+ "Africa/Porto-Novo" "W. Central Africa Standard Time"
+ "Africa/Kinshasa" "W. Central Africa Standard Time"
+ "Africa/Bangui" "W. Central Africa Standard Time"
+ "Africa/Brazzaville" "W. Central Africa Standard Time"
+ "Africa/Douala" "W. Central Africa Standard Time"
+ "Africa/Algiers" "W. Central Africa Standard Time"
+ "Africa/Libreville" "W. Central Africa Standard Time"
+ "Africa/Malabo" "W. Central Africa Standard Time"
+ "Africa/Niamey" "W. Central Africa Standard Time"
+ "Africa/Ndjamena" "W. Central Africa Standard Time"
+ "Africa/Tunis" "W. Central Africa Standard Time"
+ "Etc/GMT-1" "W. Central Africa Standard Time"
+ "Asia/Amman" "Jordan Standard Time"
+ "Europe/Bucharest" "GTB Standard Time"
+ "Asia/Nicosia" "GTB Standard Time"
+ "Asia/Famagusta" "GTB Standard Time"
+ "Europe/Athens" "GTB Standard Time"
+ "Asia/Beirut" "Middle East Standard Time"
+ "Africa/Cairo" "Egypt Standard Time"
+ "Europe/Chisinau" "E. Europe Standard Time"
+ "Asia/Damascus" "Syria Standard Time"
+ "Asia/Hebron" "West Bank Standard Time"
+ "Asia/Gaza" "West Bank Standard Time"
+ "Africa/Johannesburg" "South Africa Standard Time"
+ "Africa/Bujumbura" "South Africa Standard Time"
+ "Africa/Gaborone" "South Africa Standard Time"
+ "Africa/Lubumbashi" "South Africa Standard Time"
+ "Africa/Maseru" "South Africa Standard Time"
+ "Africa/Blantyre" "South Africa Standard Time"
+ "Africa/Maputo" "South Africa Standard Time"
+ "Africa/Kigali" "South Africa Standard Time"
+ "Africa/Juba" "South Africa Standard Time"
+ "Africa/Mbabane" "South Africa Standard Time"
+ "Africa/Lusaka" "South Africa Standard Time"
+ "Africa/Harare" "South Africa Standard Time"
+ "Etc/GMT-2" "South Africa Standard Time"
+ "Europe/Kiev" "FLE Standard Time"
+ "Europe/Mariehamn" "FLE Standard Time"
+ "Europe/Sofia" "FLE Standard Time"
+ "Europe/Tallinn" "FLE Standard Time"
+ "Europe/Helsinki" "FLE Standard Time"
+ "Europe/Vilnius" "FLE Standard Time"
+ "Europe/Riga" "FLE Standard Time"
+ "Europe/Uzhgorod" "FLE Standard Time"
+ "Europe/Zaporozhye" "FLE Standard Time"
+ "Asia/Jerusalem" "Israel Standard Time"
+ "Europe/Kaliningrad" "Kaliningrad Standard Time"
+ "Africa/Khartoum" "Sudan Standard Time"
+ "Africa/Tripoli" "Libya Standard Time"
+ "Africa/Windhoek" "Namibia Standard Time"
+ "Asia/Baghdad" "Arabic Standard Time"
+ "Europe/Istanbul" "Turkey Standard Time"
+ "Asia/Riyadh" "Arab Standard Time"
+ "Asia/Bahrain" "Arab Standard Time"
+ "Asia/Kuwait" "Arab Standard Time"
+ "Asia/Qatar" "Arab Standard Time"
+ "Asia/Aden" "Arab Standard Time"
+ "Europe/Minsk" "Belarus Standard Time"
+ "Europe/Moscow" "Russian Standard Time"
+ "Europe/Kirov" "Russian Standard Time"
+ "Europe/Simferopol" "Russian Standard Time"
+ "Africa/Nairobi" "E. Africa Standard Time"
+ "Antarctica/Syowa" "E. Africa Standard Time"
+ "Africa/Djibouti" "E. Africa Standard Time"
+ "Africa/Asmera" "E. Africa Standard Time"
+ "Africa/Addis_Ababa" "E. Africa Standard Time"
+ "Indian/Comoro" "E. Africa Standard Time"
+ "Indian/Antananarivo" "E. Africa Standard Time"
+ "Africa/Mogadishu" "E. Africa Standard Time"
+ "Africa/Dar_es_Salaam" "E. Africa Standard Time"
+ "Africa/Kampala" "E. Africa Standard Time"
+ "Indian/Mayotte" "E. Africa Standard Time"
+ "Etc/GMT-3" "E. Africa Standard Time"
+ "Asia/Tehran" "Iran Standard Time"
+ "Asia/Dubai" "Arabian Standard Time"
+ "Asia/Muscat" "Arabian Standard Time"
+ "Etc/GMT-4" "Arabian Standard Time"
+ "Europe/Astrakhan" "Astrakhan Standard Time"
+ "Europe/Ulyanovsk" "Astrakhan Standard Time"
+ "Asia/Baku" "Azerbaijan Standard Time"
+ "Europe/Samara" "Russia Time Zone 3"
+ "Indian/Mauritius" "Mauritius Standard Time"
+ "Indian/Reunion" "Mauritius Standard Time"
+ "Indian/Mahe" "Mauritius Standard Time"
+ "Europe/Saratov" "Saratov Standard Time"
+ "Asia/Tbilisi" "Georgian Standard Time"
+ "Europe/Volgograd" "Volgograd Standard Time"
+ "Asia/Yerevan" "Caucasus Standard Time"
+ "Asia/Kabul" "Afghanistan Standard Time"
+ "Asia/Tashkent" "West Asia Standard Time"
+ "Antarctica/Mawson" "West Asia Standard Time"
+ "Asia/Oral" "West Asia Standard Time"
+ "Asia/Aqtau" "West Asia Standard Time"
+ "Asia/Aqtobe" "West Asia Standard Time"
+ "Asia/Atyrau" "West Asia Standard Time"
+ "Indian/Maldives" "West Asia Standard Time"
+ "Indian/Kerguelen" "West Asia Standard Time"
+ "Asia/Dushanbe" "West Asia Standard Time"
+ "Asia/Ashgabat" "West Asia Standard Time"
+ "Asia/Samarkand" "West Asia Standard Time"
+ "Etc/GMT-5" "West Asia Standard Time"
+ "Asia/Yekaterinburg" "Ekaterinburg Standard Time"
+ "Asia/Karachi" "Pakistan Standard Time"
+ "Asia/Qyzylorda" "Qyzylorda Standard Time"
+ "Asia/Calcutta" "India Standard Time"
+ "Asia/Colombo" "Sri Lanka Standard Time"
+ "Asia/Katmandu" "Nepal Standard Time"
+ "Asia/Almaty" "Central Asia Standard Time"
+ "Antarctica/Vostok" "Central Asia Standard Time"
+ "Asia/Urumqi" "Central Asia Standard Time"
+ "Indian/Chagos" "Central Asia Standard Time"
+ "Asia/Bishkek" "Central Asia Standard Time"
+ "Asia/Qostanay" "Central Asia Standard Time"
+ "Etc/GMT-6" "Central Asia Standard Time"
+ "Asia/Dhaka" "Bangladesh Standard Time"
+ "Asia/Thimphu" "Bangladesh Standard Time"
+ "Asia/Omsk" "Omsk Standard Time"
+ "Asia/Rangoon" "Myanmar Standard Time"
+ "Indian/Cocos" "Myanmar Standard Time"
+ "Asia/Bangkok" "SE Asia Standard Time"
+ "Antarctica/Davis" "SE Asia Standard Time"
+ "Indian/Christmas" "SE Asia Standard Time"
+ "Asia/Jakarta" "SE Asia Standard Time"
+ "Asia/Pontianak" "SE Asia Standard Time"
+ "Asia/Phnom_Penh" "SE Asia Standard Time"
+ "Asia/Vientiane" "SE Asia Standard Time"
+ "Asia/Saigon" "SE Asia Standard Time"
+ "Etc/GMT-7" "SE Asia Standard Time"
+ "Asia/Barnaul" "Altai Standard Time"
+ "Asia/Hovd" "W. Mongolia Standard Time"
+ "Asia/Krasnoyarsk" "North Asia Standard Time"
+ "Asia/Novokuznetsk" "North Asia Standard Time"
+ "Asia/Novosibirsk" "N. Central Asia Standard Time"
+ "Asia/Tomsk" "Tomsk Standard Time"
+ "Asia/Shanghai" "China Standard Time"
+ "Asia/Hong_Kong" "China Standard Time"
+ "Asia/Macau" "China Standard Time"
+ "Asia/Irkutsk" "North Asia East Standard Time"
+ "Asia/Singapore" "Singapore Standard Time"
+ "Asia/Brunei" "Singapore Standard Time"
+ "Asia/Makassar" "Singapore Standard Time"
+ "Asia/Kuala_Lumpur" "Singapore Standard Time"
+ "Asia/Kuching" "Singapore Standard Time"
+ "Asia/Manila" "Singapore Standard Time"
+ "Etc/GMT-8" "Singapore Standard Time"
+ "Australia/Perth" "W. Australia Standard Time"
+ "Asia/Taipei" "Taipei Standard Time"
+ "Asia/Ulaanbaatar" "Ulaanbaatar Standard Time"
+ "Asia/Choibalsan" "Ulaanbaatar Standard Time"
+ "Australia/Eucla" "Aus Central W. Standard Time"
+ "Asia/Chita" "Transbaikal Standard Time"
+ "Asia/Tokyo" "Tokyo Standard Time"
+ "Asia/Jayapura" "Tokyo Standard Time"
+ "Pacific/Palau" "Tokyo Standard Time"
+ "Asia/Dili" "Tokyo Standard Time"
+ "Etc/GMT-9" "Tokyo Standard Time"
+ "Asia/Pyongyang" "North Korea Standard Time"
+ "Asia/Seoul" "Korea Standard Time"
+ "Asia/Yakutsk" "Yakutsk Standard Time"
+ "Asia/Khandyga" "Yakutsk Standard Time"
+ "Australia/Adelaide" "Cen. Australia Standard Time"
+ "Australia/Broken_Hill" "Cen. Australia Standard Time"
+ "Australia/Darwin" "AUS Central Standard Time"
+ "Australia/Brisbane" "E. Australia Standard Time"
+ "Australia/Lindeman" "E. Australia Standard Time"
+ "Australia/Sydney" "AUS Eastern Standard Time"
+ "Australia/Melbourne" "AUS Eastern Standard Time"
+ "Pacific/Port_Moresby" "West Pacific Standard Time"
+ "Antarctica/DumontDUrville" "West Pacific Standard Time"
+ "Pacific/Truk" "West Pacific Standard Time"
+ "Pacific/Guam" "West Pacific Standard Time"
+ "Pacific/Saipan" "West Pacific Standard Time"
+ "Etc/GMT-10" "West Pacific Standard Time"
+ "Australia/Hobart" "Tasmania Standard Time"
+ "Australia/Currie" "Tasmania Standard Time"
+ "Antarctica/Macquarie" "Tasmania Standard Time"
+ "Asia/Vladivostok" "Vladivostok Standard Time"
+ "Asia/Ust-Nera" "Vladivostok Standard Time"
+ "Australia/Lord_Howe" "Lord Howe Standard Time"
+ "Pacific/Bougainville" "Bougainville Standard Time"
+ "Asia/Srednekolymsk" "Russia Time Zone 10"
+ "Asia/Magadan" "Magadan Standard Time"
+ "Pacific/Norfolk" "Norfolk Standard Time"
+ "Asia/Sakhalin" "Sakhalin Standard Time"
+ "Pacific/Guadalcanal" "Central Pacific Standard Time"
+ "Antarctica/Casey" "Central Pacific Standard Time"
+ "Pacific/Ponape" "Central Pacific Standard Time"
+ "Pacific/Kosrae" "Central Pacific Standard Time"
+ "Pacific/Noumea" "Central Pacific Standard Time"
+ "Pacific/Efate" "Central Pacific Standard Time"
+ "Etc/GMT-11" "Central Pacific Standard Time"
+ "Asia/Kamchatka" "Russia Time Zone 11"
+ "Asia/Anadyr" "Russia Time Zone 11"
+ "Pacific/Auckland" "New Zealand Standard Time"
+ "Antarctica/McMurdo" "New Zealand Standard Time"
+ "Etc/GMT-12" "UTC+12"
+ "Pacific/Tarawa" "UTC+12"
+ "Pacific/Majuro" "UTC+12"
+ "Pacific/Kwajalein" "UTC+12"
+ "Pacific/Nauru" "UTC+12"
+ "Pacific/Funafuti" "UTC+12"
+ "Pacific/Wake" "UTC+12"
+ "Pacific/Wallis" "UTC+12"
+ "Pacific/Fiji" "Fiji Standard Time"
+ "Pacific/Chatham" "Chatham Islands Standard Time"
+ "Etc/GMT-13" "UTC+13"
+ "Pacific/Enderbury" "UTC+13"
+ "Pacific/Fakaofo" "UTC+13"
+ "Pacific/Tongatapu" "Tonga Standard Time"
+ "Pacific/Apia" "Samoa Standard Time"
+ "Pacific/Kiritimati" "Line Islands Standard Time"
+ "Etc/GMT-14" "Line Islands Standard Time"))
+ "A hash table mapping IANA/Olson time zone names to server time zone names.")
+
+;; Generated with:
+;;(defun zdump-line-to-current-time-zone-value ()
+;; "Convert a zdump line to the format returned by `current-time-zone'."
+;; (unless (eobp)
+;; (search-forward " ")
+;; (search-forward " ")
+;; (let ((start (point)))
+;; (forward-word)
+;; (let* ((offset-string (buffer-substring-no-properties start (point)))
+;; (offset-number-hours
+;; (* (string-to-number (substring offset-string 0 3)) 3600))
+;; (offset-number
+;; (if (= (length offset-string) 3)
+;; offset-number-hours
+;; (let ((offset-number-minutes
+;; (string-to-number (substring offset-string 3))))
+;; (if (< offset-number-hours 0)
+;; (- offset-number-hours (* offset-number-minutes 60))
+;; (+ offset-number-hours (* offset-number-minutes 60)))))))
+;; (prog1
+;; (cond ((eolp)
+;; (list offset-number offset-string))
+;; ((progn (search-forward " ") (= (char-after (point)) 9))
+;; (list offset-number offset-string))
+;; (t
+;; (let ((start (point)))
+;; (forward-word)
+;; (list offset-number
+;; (buffer-substring-no-properties start (point))))))
+;; (move-end-of-line nil)
+;; (forward-char))))))
+;;
+;;(insert
+;; (concat
+;; "(defvar exco--time-zone-emacs-to-olson "
+;; (let ((table (make-hash-table :test #'equal)))
+;; (dolist (file
+;; (split-string
+;; (org-trim (shell-command-to-string
+;; "find /usr/share/zoneinfo/right -type f"))
+;; "\n"))
+;; (with-temp-buffer
+;; (goto-char (point-min))
+;; (shell-command (format "zdump -c 2020,2021 -i %S" file) t)
+;; (next-line)
+;; (next-line)
+;; (while (not (eobp))
+;; (let* ((key (zdump-line-to-current-time-zone-value))
+;; (value (substring file (length "/usr/share/zoneinfo/right/")))
+;; (values (gethash key table)))
+;; (if values
+;; (unless (member value values)
+;; (puthash key (cons value values) table))
+;; (puthash key (list value) table))))))
+;; (format "%S" table))
+;; "(concat \"A hash table mapping `current-time-zone' values to\"
+;; \" IANA/Olson time zone names.\")"))
+
+;; `exco-time-zone' only uses one of these, but I thought knowing this
+;; mapping might be generally useful.
+(defvar exco--time-zone-emacs-to-olson
+ #s(hash-table
+ size 97
+ test equal
+ rehash-size 1.5
+ rehash-threshold 0.8125
+ data
+ ((-43200 "-12") ("Etc/GMT+12")
+ (-39600 "SST") ("Pacific/Pago_Pago")
+ (-39600 "-11") ("Etc/GMT+11" "Pacific/Niue")
+ (-36000 "HST") ("HST" "America/Adak" "Pacific/Honolulu")
+ (-36000 "-10") ("Etc/GMT+10" "Pacific/Tahiti" "Pacific/Rarotonga")
+ (-34200 "-0930") ("Pacific/Marquesas")
+ (-32400 "HDT") ("America/Adak")
+ (-32400 "AKST") ("America/Sitka" "America/Anchorage" "America/Nome"
+ "America/Metlakatla" "America/Yakutat" "America/Juneau")
+ (-32400 "-09") ("Etc/GMT+9" "Pacific/Gambier")
+ (-28800 "PST") ("America/Dawson" "America/Vancouver"
+ "America/Whitehorse" "America/Tijuana"
+ "America/Los_Angeles" "PST8PDT")
+ (-28800 "AKDT") ("America/Sitka" "America/Anchorage" "America/Nome"
+ "America/Metlakatla" "America/Yakutat" "America/Juneau")
+ (-28800 "-08") ("Etc/GMT+8" "Pacific/Pitcairn")
+ (-25200 "PDT") ("America/Dawson" "America/Vancouver"
+ "America/Whitehorse" "America/Tijuana"
+ "America/Los_Angeles" "PST8PDT")
+ (-25200 "MST") ("MST7MDT" "America/Dawson" "America/Yellowknife"
+ "America/Fort_Nelson" "America/Creston"
+ "America/Cambridge_Bay" "America/Boise"
+ "America/Mazatlan" "America/Chihuahua" "America/Phoenix"
+ "America/Inuvik" "America/Hermosillo" "America/Edmonton"
+ "America/Whitehorse" "America/Dawson_Creek"
+ "America/Ojinaga" "America/Denver" "MST")
+ (-25200 "-07") ("Etc/GMT+7")
+ (-21600 "MDT") ("MST7MDT" "America/Yellowknife" "America/Cambridge_Bay"
+ "America/Boise" "America/Mazatlan" "America/Chihuahua"
+ "America/Inuvik" "America/Edmonton" "America/Ojinaga"
+ "America/Denver")
+ (-21600 "CST") ("CST6CDT" "America/Managua" "America/Belize"
+ "America/Regina" "America/Rankin_Inlet"
+ "America/Tegucigalpa" "America/Resolute"
+ "America/North_Dakota/Beulah"
+ "America/North_Dakota/New_Salem"
+ "America/North_Dakota/Center" "America/Merida"
+ "America/Guatemala" "America/Winnipeg" "America/Chicago"
+ "America/Swift_Current" "America/Menominee"
+ "America/Monterrey" "America/Mexico_City"
+ "America/El_Salvador" "America/Indiana/Tell_City"
+ "America/Indiana/Knox" "America/Costa_Rica"
+ "America/Matamoros" "America/Bahia_Banderas"
+ "America/Rainy_River")
+ (-21600 "-06") ("Etc/GMT+6" "Pacific/Easter" "Pacific/Galapagos")
+ (-18000 "EST") ("EST5EDT" "America/Detroit" "America/Port-au-Prince"
+ "America/Jamaica" "America/Iqaluit" "America/Grand_Turk"
+ "America/Kentucky/Monticello"
+ "America/Kentucky/Louisville" "America/Cancun"
+ "America/Toronto" "America/Atikokan" "America/Panama"
+ "America/Pangnirtung" "America/Indiana/Indianapolis"
+ "America/Indiana/Vevay" "America/Indiana/Vincennes"
+ "America/Indiana/Petersburg" "America/Indiana/Winamac"
+ "America/Indiana/Marengo" "America/Nipigon"
+ "America/Nassau" "America/New_York"
+ "America/Thunder_Bay" "EST")
+ (-18000 "CST") ("America/Havana")
+ (-18000 "CDT") ("CST6CDT" "America/Rankin_Inlet" "America/Resolute"
+ "America/North_Dakota/Beulah"
+ "America/North_Dakota/New_Salem"
+ "America/North_Dakota/Center" "America/Merida"
+ "America/Winnipeg" "America/Chicago" "America/Menominee"
+ "America/Monterrey" "America/Mexico_City"
+ "America/Indiana/Tell_City" "America/Indiana/Knox"
+ "America/Matamoros" "America/Bahia_Banderas"
+ "America/Rainy_River")
+ (-18000 "-05") ("America/Rio_Branco" "America/Eirunepe" "America/Lima"
+ "America/Bogota" "America/Guayaquil" "Etc/GMT+5"
+ "Pacifibc/Easter")
+ (-14400 "EDT") ("EST5EDT" "America/Detroit" "America/Port-au-Prince"
+ "America/Iqaluit" "America/Grand_Turk"
+ "America/Kentucky/Monticello"
+ "America/Kentucky/Louisville" "America/Toronto"
+ "America/Pangnirtung" "America/Indiana/Indianapolis"
+ "America/Indiana/Vevay" "America/Indiana/Vincennes"
+ "America/Indiana/Petersburg" "America/Indiana/Winamac"
+ "America/Indiana/Marengo" "America/Nipigon"
+ "America/Nassau" "America/New_York"
+ "America/Thunder_Bay")
+ (-14400 "CDT") ("America/Havana")
+ (-14400 "AST") ("Atlantic/Bermuda" "America/Thule" "America/Glace_Bay"
+ "America/Goose_Bay" "America/Puerto_Rico"
+ "America/Santo_Domingo" "America/Curacao"
+ "America/Barbados" "America/Blanc-Sablon"
+ "America/Martinique" "America/Moncton" "America/Halifax"
+ "America/Port_of_Spain")
+ (-14400 "-04") ("America/Santiago" "America/Cuiaba" "America/Caracas"
+ "America/La_Paz" "America/Porto_Velho" "America/Guyana"
+ "America/Campo_Grande" "America/Manaus"
+ "America/Asuncion" "America/Boa_Vista" "Etc/GMT+4")
+ (-12600 "NST") ("America/St_Johns")
+ (-10800 "ADT") ("Atlantic/Bermuda" "America/Thule" "America/Glace_Bay"
+ "America/Goose_Bay" "America/Moncton" "America/Halifax")
+ (-10800 "-03") ("Atlantic/Stanley" "America/Miquelon"
"America/Santiago"
+ "America/Santarem" "America/Argentina/Ushuaia"
+ "America/Argentina/Jujuy"
+ "America/Argentina/Rio_Gallegos"
+ "America/Argentina/La_Rioja"
+ "America/Argentina/San_Juan" "America/Argentina/Salta"
+ "America/Argentina/San_Luis" "America/Argentina/Tucuman"
+ "America/Argentina/Mendoza"
+ "America/Argentina/Catamarca"
+ "America/Argentina/Cordoba"
+ "America/Argentina/Buenos_Aires"
+ "America/Bahia" "America/Cayenne" "America/Sao_Paulo"
+ "America/Maceio" "America/Fortaleza"
+ "America/Paramaribo" "America/Araguaina" "America/Belem"
+ "America/Nuuk" "America/Punta_Arenas"
+ "America/Montevideo" "America/Asuncion" "America/Recife"
+ "Etc/GMT+3" "Antarctica/Palmer" "Antarctica/Rothera")
+ ( -9000 "NDT") ("America/St_Johns")
+ ( -7200 "-02") ("Atlantic/South_Georgia" "America/Miquelon"
+ "America/Nuuk" "America/Noronha" "Etc/GMT+2")
+ ( -3600 "-01") ("Atlantic/Cape_Verde" "Atlantic/Azores"
+ "America/Scoresbysund" "Etc/GMT+1")
+ ( 0 "+00") ("Atlantic/Azores" "Africa/El_Aaiun" "Africa/Casablanca"
+ "America/Scoresbysund" "Antarctica/Troll")
+ ( 0 "-00") ("Factory")
+ ( 0 "GMT") ("Atlantic/Reykjavik" "Africa/Abidjan" "Africa/Monrovia"
+ "Africa/Sao_Tome" "Africa/Bissau" "Africa/Accra"
+ "Europe/London" "Europe/Dublin" "America/Danmarkshavn"
+ "Etc/GMT")
+ ( 0 "UTC") ("Etc/UTC")
+ ( 0 "WET") ("Atlantic/Faroe" "Atlantic/Canary" "Atlantic/Madeira"
+ "Europe/Lisbon" "WET")
+ ( +3600 "+01") ("Africa/El_Aaiun" "Africa/Casablanca" "Etc/GMT-1")
+ ( +3600 "BST") ("Europe/London")
+ ( +3600 "CET") ("Africa/Tunis" "Africa/Ceuta" "Africa/Algiers" "CET"
+ "Europe/Oslo" "Europe/Berlin" "Europe/Amsterdam"
+ "Europe/Rome" "Europe/Budapest" "Europe/Tirane"
+ "Europe/Copenhagen" "Europe/Belgrade" "Europe/Malta"
+ "Europe/Warsaw" "Europe/Vienna" "Europe/Stockholm"
+ "Europe/Paris" "Europe/Andorra" "Europe/Brussels"
+ "Europe/Madrid" "Europe/Gibraltar" "Europe/Zurich"
+ "Europe/Monaco" "Europe/Prague" "Europe/Luxembourg")
+ ( +3600 "IST") ("Europe/Dublin")
+ ( +3600 "MET") ("MET")
+ ( +3600 "WAT") ("Africa/Ndjamena" "Africa/Lagos")
+ ( +3600 "WEST") ("Atlantic/Faroe" "Atlantic/Canary" "Atlantic/Madeira"
+ "Europe/Lisbon" "WET")
+ ( +7200 "+02") ("Etc/GMT-2" "Antarctica/Troll")
+ ( +7200 "CAT") ("Africa/Khartoum" "Africa/Maputo" "Africa/Windhoek")
+ ( +7200 "CEST") ("Africa/Ceuta" "CET" "Europe/Oslo" "Europe/Berlin"
+ "Europe/Amsterdam" "Europe/Rome" "Europe/Budapest"
+ "Europe/Tirane" "Europe/Copenhagen" "Europe/Belgrade"
+ "Europe/Malta" "Europe/Warsaw" "Europe/Vienna"
+ "Europe/Stockholm" "Europe/Paris" "Europe/Andorra"
+ "Europe/Brussels" "Europe/Madrid" "Europe/Gibraltar"
+ "Europe/Zurich" "Europe/Monaco" "Europe/Prague"
+ "Europe/Luxembourg")
+ ( +7200 "EET") ("Africa/Cairo" "Africa/Tripoli" "Europe/Zaporozhye"
+ "Europe/Kiev" "Europe/Riga" "Europe/Chisinau"
+ "Europe/Athens" "Europe/Helsinki" "Europe/Uzhgorod"
+ "Europe/Bucharest" "Europe/Kaliningrad" "Europe/Sofia"
+ "Europe/Vilnius" "Europe/Tallinn" "EET" "Asia/Beirut"
+ "Asia/Amman" "Asia/Damascus" "Asia/Nicosia"
+ "Asia/Hebron" "Asia/Famagusta" "Asia/Gaza")
+ ( +7200 "IST") ("Asia/Jerusalem")
+ ( +7200 "MEST") ("MET")
+ ( +7200 "SAST") ("Africa/Johannesburg")
+ (+10800 "+03") ("Europe/Volgograd" "Europe/Minsk" "Europe/Istanbul"
+ "Europe/Kirov" "Etc/GMT-3" "Asia/Riyadh" "Asia/Baghdad"
+ "Asia/Qatar" "Antarctica/Syowa")
+ (+10800 "EAT") ("Africa/Nairobi" "Africa/Juba")
+ (+10800 "EEST") ("Europe/Zaporozhye" "Europe/Kiev" "Europe/Riga"
+ "Europe/Chisinau" "Europe/Athens" "Europe/Helsinki"
+ "Europe/Uzhgorod" "Europe/Bucharest" "Europe/Sofia"
+ "Europe/Vilnius" "Europe/Tallinn" "EET" "Asia/Beirut"
+ "Asia/Amman" "Asia/Damascus" "Asia/Nicosia"
+ "Asia/Hebron" "Asia/Famagusta" "Asia/Gaza")
+ (+10800 "IDT") ("Asia/Jerusalem")
+ (+10800 "MSK") ("Europe/Moscow" "Europe/Simferopol")
+ (+12600 "+0330") ("Asia/Tehran")
+ (+14400 "+04") ("Indian/Mauritius" "Indian/Reunion" "Indian/Mahe"
+ "Europe/Samara" "Europe/Volgograd" "Europe/Astrakhan"
+ "Europe/Saratov" "Europe/Ulyanovsk" "Etc/GMT-4"
+ "Asia/Baku" "Asia/Yerevan" "Asia/Dubai" "Asia/Tbilisi")
+ (+16200 "+0430") ("Asia/Tehran" "Asia/Kabul")
+ (+18000 "+05") ("Indian/Maldives" "Indian/Kerguelen" "Etc/GMT-5"
+ "Asia/Aqtobe" "Asia/Oral" "Asia/Aqtau" "Asia/Tashkent"
+ "Asia/Dushanbe" "Asia/Atyrau" "Asia/Yekaterinburg"
+ "Asia/Samarkand" "Asia/Ashgabat" "Asia/Qyzylorda"
+ "Antarctica/Mawson")
+ (+18000 "PKT") ("Asia/Karachi")
+ (+19800 "+0530") ("Asia/Colombo")
+ (+19800 "IST") ("Asia/Kolkata")
+ (+20700 "+0545") ("Asia/Kathmandu")
+ (+21600 "+06") ("Indian/Chagos" "Etc/GMT-6" "Asia/Qostanay"
+ "Asia/Thimphu" "Asia/Bishkek" "Asia/Urumqi" "Asia/Omsk"
+ "Asia/Almaty" "Asia/Dhaka" "Antarctica/Vostok")
+ (+23400 "+0630") ("Indian/Cocos" "Asia/Yangon")
+ (+25200 "+07") ("Indian/Christmas" "Etc/GMT-7" "Asia/Hovd"
+ "Asia/Novokuznetsk" "Asia/Bangkok" "Asia/Tomsk"
+ "Asia/Barnaul" "Asia/Ho_Chi_Minh" "Asia/Novosibirsk"
+ "Asia/Krasnoyarsk" "Antarctica/Davis")
+ (+25200 "WIB") ("Asia/Jakarta" "Asia/Pontianak")
+ (+28800 "+08") ("Etc/GMT-8" "Asia/Brunei" "Asia/Kuching"
+ "Asia/Ulaanbaatar" "Asia/Kuala_Lumpur" "Asia/Singapore"
+ "Asia/Choibalsan" "Asia/Irkutsk" "Antarctica/Casey")
+ (+28800 "AWST") ("Australia/Perth")
+ (+28800 "CST") ("Asia/Macau" "Asia/Shanghai" "Asia/Taipei")
+ (+28800 "HKT") ("Asia/Hong_Kong")
+ (+28800 "PST") ("Asia/Manila")
+ (+28800 "WITA") ("Asia/Makassar")
+ (+31500 "+0845") ("Australia/Eucla")
+ (+32400 "+09") ("Etc/GMT-9" "Asia/Yakutsk" "Asia/Chita" "Asia/Khandyga"
+ "Asia/Dili" "Pacific/Palau")
+ (+32400 "JST") ("Asia/Tokyo")
+ (+32400 "KST") ("Asia/Seoul" "Asia/Pyongyang")
+ (+32400 "WIT") ("Asia/Jayapura")
+ (+34200 "ACST") ("Australia/Darwin" "Australia/Adelaide"
+ "Australia/Broken_Hill")
+ (+36000 "+10") ("Etc/GMT-10" "Asia/Ust-Nera" "Asia/Vladivostok"
+ "Pacific/Chuuk" "Pacific/Port_Moresby"
+ "Antarctica/DumontDUrville")
+ (+36000 "AEST") ("Australia/Melbourne" "Australia/Lindeman"
+ "Australia/Hobart" "Australia/Brisbane"
+ "Australia/Sydney" "Antarctica/Macquarie")
+ (+36000 "ChST") ("Pacific/Guam")
+ (+37800 "+1030") ("Australia/Lord_Howe")
+ (+37800 "ACDT") ("Australia/Adelaide" "Australia/Broken_Hill")
+ (+39600 "+11") ("Australia/Lord_Howe" "Etc/GMT-11" "Asia/Magadan"
+ "Asia/Sakhalin" "Asia/Srednekolymsk" "Pacific/Norfolk"
+ "Pacific/Pohnpei" "Pacific/Guadalcanal" "Pacific/Kosrae"
+ "Pacific/Bougainville" "Pacific/Noumea" "Pacific/Efate"
+ "Antarctica/Casey")
+ (+39600 "AEDT") ("Australia/Melbourne" "Australia/Hobart"
+ "Australia/Sydney" "Antarctica/Macquarie")
+ (+43200 "+12") ("Etc/GMT-12" "Asia/Anadyr" "Asia/Kamchatka"
+ "Pacific/Wake" "Pacific/Majuro" "Pacific/Norfolk"
+ "Pacific/Nauru" "Pacific/Funafuti" "Pacific/Fiji"
+ "Pacific/Kwajalein" "Pacific/Tarawa" "Pacific/Wallis")
+ (+43200 "NZST") ("Pacific/Auckland")
+ (+45900 "+1245") ("Pacific/Chatham")
+ (+46800 "+13") ("Etc/GMT-13" "Pacific/Tongatapu" "Pacific/Enderbury"
+ "Pacific/Fiji" "Pacific/Fakaofo" "Pacific/Apia")
+ (+46800 "NZDT") ("Pacific/Auckland")
+ (+49500 "+1345") ("Pacific/Chatham")
+ (+50400 "+14") ("Etc/GMT-14" "Pacific/Kiritimati" "Pacific/Apia")))
+ (concat "A hash table mapping `current-time-zone' values to"
+ " IANA/Olson time zone names."))
+
+(defun excorporate-customize-time-zone ()
+ "Prompt for a server-style time zone from a list of valid values."
+ (interactive)
+ (let ((zone (completing-read
+ "Excorporate time zone: "
+ (cons "Emacs Built-in"
+ (hash-table-values exco--time-zone-olson-to-server))
+ nil t)))
+ (customize-save-variable 'excorporate-time-zone
+ (if (equal zone "Emacs Built-in") nil zone))))
+
+(defun exco-time-zone (&optional emacs-time-zone)
+ "Return server style time zone string.
+Return `excorporate-time-zone' if it is non-nil, or look up the
+time zone based on `current-time-zone' otherwise.
+If EMACS-TIME-ZONE is specified, convert it to a server time zone."
+ (if (and (not emacs-time-zone) excorporate-time-zone)
+ excorporate-time-zone
+ (or
+ (catch 'found
+ (dolist (zone
+ (gethash (or emacs-time-zone (current-time-zone))
+ exco--time-zone-emacs-to-olson))
+ (let ((server-zone (gethash zone exco--time-zone-olson-to-server)))
+ (when server-zone (throw 'found server-zone)))))
+ (error (concat "Excorporate: Could not compute server time zone; "
+ "Run `excorporate-customize-time-zone'")))))
+
+(provide 'excorporate-time-zones)
+
+;;; excorporate-time-zones.el ends here