001/*
002 * The MIT License
003 * Copyright (c) 2012 Microsoft Corporation
004 *
005 * Permission is hereby granted, free of charge, to any person obtaining a copy
006 * of this software and associated documentation files (the "Software"), to deal
007 * in the Software without restriction, including without limitation the rights
008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
009 * copies of the Software, and to permit persons to whom the Software is
010 * furnished to do so, subject to the following conditions:
011 *
012 * The above copyright notice and this permission notice shall be included in
013 * all copies or substantial portions of the Software.
014 *
015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
021 * THE SOFTWARE.
022 */
023
024package microsoft.exchange.webservices.data.util;
025
026import java.util.HashMap;
027import java.util.Map;
028import java.util.TimeZone;
029
030/**
031 * Miscellany timezone functions
032 */
033public final class TimeZoneUtils {
034
035  // A map of olson name > Microsoft Name.
036  private static final Map<String, String> olsonTimeZoneToMs = createOlsonTimeZoneToMsMap();
037
038
039  private TimeZoneUtils() {
040    throw new UnsupportedOperationException();
041  }
042
043
044  /**
045   * Convert Olson TimeZone to Microsoft TimeZone Generated using Unicode CLDR project Example:
046   * https://gist.github.com/scottmac/655675e9b4d4913c539c
047   *
048   * @param timeZone java timezone (Olson)
049   * @return a microsoft timezone identifier (ala Eastern Standard Time)
050   */
051  public static String getMicrosoftTimeZoneName(final TimeZone timeZone) {
052    if (timeZone == null) {
053      throw new IllegalArgumentException("Parameter \"timeZone\" must be defined");
054    }
055
056    final String id = timeZone.getID();
057    return olsonTimeZoneToMs.get(id);
058  }
059
060
061  public static Map<String, String> createOlsonTimeZoneToMsMap() {
062    final Map<String, String> map = new HashMap<String, String>();
063    map.put("Africa/Abidjan", "Greenwich Standard Time");
064    map.put("Africa/Accra", "Greenwich Standard Time");
065    map.put("Africa/Addis_Ababa", "E. Africa Standard Time");
066    map.put("Africa/Algiers", "W. Central Africa Standard Time");
067    map.put("Africa/Asmara", "E. Africa Standard Time");
068    map.put("Africa/Asmera", "E. Africa Standard Time");
069    map.put("Africa/Bamako", "Greenwich Standard Time");
070    map.put("Africa/Bangui", "W. Central Africa Standard Time");
071    map.put("Africa/Banjul", "Greenwich Standard Time");
072    map.put("Africa/Bissau", "Greenwich Standard Time");
073    map.put("Africa/Blantyre", "South Africa Standard Time");
074    map.put("Africa/Brazzaville", "W. Central Africa Standard Time");
075    map.put("Africa/Bujumbura", "South Africa Standard Time");
076    map.put("Africa/Cairo", "Egypt Standard Time");
077    map.put("Africa/Casablanca", "Morocco Standard Time");
078    map.put("Africa/Ceuta", "Romance Standard Time");
079    map.put("Africa/Conakry", "Greenwich Standard Time");
080    map.put("Africa/Dakar", "Greenwich Standard Time");
081    map.put("Africa/Dar_es_Salaam", "E. Africa Standard Time");
082    map.put("Africa/Djibouti", "E. Africa Standard Time");
083    map.put("Africa/Douala", "W. Central Africa Standard Time");
084    map.put("Africa/El_Aaiun", "Morocco Standard Time");
085    map.put("Africa/Freetown", "Greenwich Standard Time");
086    map.put("Africa/Gaborone", "South Africa Standard Time");
087    map.put("Africa/Harare", "South Africa Standard Time");
088    map.put("Africa/Johannesburg", "South Africa Standard Time");
089    map.put("Africa/Juba", "E. Africa Standard Time");
090    map.put("Africa/Kampala", "E. Africa Standard Time");
091    map.put("Africa/Khartoum", "E. Africa Standard Time");
092    map.put("Africa/Kigali", "South Africa Standard Time");
093    map.put("Africa/Kinshasa", "W. Central Africa Standard Time");
094    map.put("Africa/Lagos", "W. Central Africa Standard Time");
095    map.put("Africa/Libreville", "W. Central Africa Standard Time");
096    map.put("Africa/Lome", "Greenwich Standard Time");
097    map.put("Africa/Luanda", "W. Central Africa Standard Time");
098    map.put("Africa/Lubumbashi", "South Africa Standard Time");
099    map.put("Africa/Lusaka", "South Africa Standard Time");
100    map.put("Africa/Malabo", "W. Central Africa Standard Time");
101    map.put("Africa/Maputo", "South Africa Standard Time");
102    map.put("Africa/Maseru", "South Africa Standard Time");
103    map.put("Africa/Mbabane", "South Africa Standard Time");
104    map.put("Africa/Mogadishu", "E. Africa Standard Time");
105    map.put("Africa/Monrovia", "Greenwich Standard Time");
106    map.put("Africa/Nairobi", "E. Africa Standard Time");
107    map.put("Africa/Ndjamena", "W. Central Africa Standard Time");
108    map.put("Africa/Niamey", "W. Central Africa Standard Time");
109    map.put("Africa/Nouakchott", "Greenwich Standard Time");
110    map.put("Africa/Ouagadougou", "Greenwich Standard Time");
111    map.put("Africa/Porto-Novo", "W. Central Africa Standard Time");
112    map.put("Africa/Sao_Tome", "Greenwich Standard Time");
113    map.put("Africa/Timbuktu", "Greenwich Standard Time");
114    map.put("Africa/Tripoli", "Libya Standard Time");
115    map.put("Africa/Tunis", "W. Central Africa Standard Time");
116    map.put("Africa/Windhoek", "Namibia Standard Time");
117    map.put("America/Anchorage", "Alaskan Standard Time");
118    map.put("America/Anguilla", "SA Western Standard Time");
119    map.put("America/Antigua", "SA Western Standard Time");
120    map.put("America/Araguaina", "SA Eastern Standard Time");
121    map.put("America/Argentina/Buenos_Aires", "Argentina Standard Time");
122    map.put("America/Argentina/Catamarca", "Argentina Standard Time");
123    map.put("America/Argentina/ComodRivadavia", "Argentina Standard Time");
124    map.put("America/Argentina/Cordoba", "Argentina Standard Time");
125    map.put("America/Argentina/Jujuy", "Argentina Standard Time");
126    map.put("America/Argentina/La_Rioja", "Argentina Standard Time");
127    map.put("America/Argentina/Mendoza", "Argentina Standard Time");
128    map.put("America/Argentina/Rio_Gallegos", "Argentina Standard Time");
129    map.put("America/Argentina/Salta", "Argentina Standard Time");
130    map.put("America/Argentina/San_Juan", "Argentina Standard Time");
131    map.put("America/Argentina/San_Luis", "Argentina Standard Time");
132    map.put("America/Argentina/Tucuman", "Argentina Standard Time");
133    map.put("America/Argentina/Ushuaia", "Argentina Standard Time");
134    map.put("America/Aruba", "SA Western Standard Time");
135    map.put("America/Asuncion", "Paraguay Standard Time");
136    map.put("America/Atikokan", "SA Pacific Standard Time");
137    map.put("America/Bahia", "Bahia Standard Time");
138    map.put("America/Bahia_Banderas", "Central Standard Time (Mexico)");
139    map.put("America/Barbados", "SA Western Standard Time");
140    map.put("America/Belem", "SA Eastern Standard Time");
141    map.put("America/Belize", "Central America Standard Time");
142    map.put("America/Blanc-Sablon", "SA Western Standard Time");
143    map.put("America/Boa_Vista", "SA Western Standard Time");
144    map.put("America/Bogota", "SA Pacific Standard Time");
145    map.put("America/Boise", "Mountain Standard Time");
146    map.put("America/Buenos_Aires", "Argentina Standard Time");
147    map.put("America/Cambridge_Bay", "Mountain Standard Time");
148    map.put("America/Campo_Grande", "Central Brazilian Standard Time");
149    map.put("America/Cancun", "Eastern Standard Time (Mexico)");
150    map.put("America/Caracas", "Venezuela Standard Time");
151    map.put("America/Catamarca", "Argentina Standard Time");
152    map.put("America/Cayenne", "SA Eastern Standard Time");
153    map.put("America/Cayman", "SA Pacific Standard Time");
154    map.put("America/Chicago", "Central Standard Time");
155    map.put("America/Chihuahua", "Mountain Standard Time (Mexico)");
156    map.put("America/Coral_Harbour", "SA Pacific Standard Time");
157    map.put("America/Cordoba", "Argentina Standard Time");
158    map.put("America/Costa_Rica", "Central America Standard Time");
159    map.put("America/Creston", "US Mountain Standard Time");
160    map.put("America/Cuiaba", "Central Brazilian Standard Time");
161    map.put("America/Curacao", "SA Western Standard Time");
162    map.put("America/Danmarkshavn", "UTC");
163    map.put("America/Dawson", "Pacific Standard Time");
164    map.put("America/Dawson_Creek", "US Mountain Standard Time");
165    map.put("America/Denver", "Mountain Standard Time");
166    map.put("America/Detroit", "Eastern Standard Time");
167    map.put("America/Dominica", "SA Western Standard Time");
168    map.put("America/Edmonton", "Mountain Standard Time");
169    map.put("America/Eirunepe", "SA Pacific Standard Time");
170    map.put("America/El_Salvador", "Central America Standard Time");
171    map.put("America/Ensenada", "Pacific Standard Time");
172    map.put("America/Fort_Wayne", "US Eastern Standard Time");
173    map.put("America/Fortaleza", "SA Eastern Standard Time");
174    map.put("America/Glace_Bay", "Atlantic Standard Time");
175    map.put("America/Godthab", "Greenland Standard Time");
176    map.put("America/Goose_Bay", "Atlantic Standard Time");
177    map.put("America/Grand_Turk", "SA Western Standard Time");
178    map.put("America/Grenada", "SA Western Standard Time");
179    map.put("America/Guadeloupe", "SA Western Standard Time");
180    map.put("America/Guatemala", "Central America Standard Time");
181    map.put("America/Guayaquil", "SA Pacific Standard Time");
182    map.put("America/Guyana", "SA Western Standard Time");
183    map.put("America/Halifax", "Atlantic Standard Time");
184    map.put("America/Havana", "Eastern Standard Time");
185    map.put("America/Hermosillo", "US Mountain Standard Time");
186    map.put("America/Indiana/Indianapolis", "US Eastern Standard Time");
187    map.put("America/Indiana/Knox", "Central Standard Time");
188    map.put("America/Indiana/Marengo", "US Eastern Standard Time");
189    map.put("America/Indiana/Petersburg", "Eastern Standard Time");
190    map.put("America/Indiana/Tell_City", "Central Standard Time");
191    map.put("America/Indiana/Vevay", "US Eastern Standard Time");
192    map.put("America/Indiana/Vincennes", "Eastern Standard Time");
193    map.put("America/Indiana/Winamac", "Eastern Standard Time");
194    map.put("America/Indianapolis", "US Eastern Standard Time");
195    map.put("America/Inuvik", "Mountain Standard Time");
196    map.put("America/Iqaluit", "Eastern Standard Time");
197    map.put("America/Jamaica", "SA Pacific Standard Time");
198    map.put("America/Jujuy", "Argentina Standard Time");
199    map.put("America/Juneau", "Alaskan Standard Time");
200    map.put("America/Kentucky/Louisville", "Eastern Standard Time");
201    map.put("America/Kentucky/Monticello", "Eastern Standard Time");
202    map.put("America/Knox_IN", "Central Standard Time");
203    map.put("America/Kralendijk", "SA Western Standard Time");
204    map.put("America/La_Paz", "SA Western Standard Time");
205    map.put("America/Lima", "SA Pacific Standard Time");
206    map.put("America/Los_Angeles", "Pacific Standard Time");
207    map.put("America/Louisville", "Eastern Standard Time");
208    map.put("America/Lower_Princes", "SA Western Standard Time");
209    map.put("America/Maceio", "SA Eastern Standard Time");
210    map.put("America/Managua", "Central America Standard Time");
211    map.put("America/Manaus", "SA Western Standard Time");
212    map.put("America/Marigot", "SA Western Standard Time");
213    map.put("America/Martinique", "SA Western Standard Time");
214    map.put("America/Matamoros", "Central Standard Time");
215    map.put("America/Mazatlan", "Mountain Standard Time (Mexico)");
216    map.put("America/Mendoza", "Argentina Standard Time");
217    map.put("America/Menominee", "Central Standard Time");
218    map.put("America/Merida", "Central Standard Time (Mexico)");
219    map.put("America/Mexico_City", "Central Standard Time (Mexico)");
220    map.put("America/Moncton", "Atlantic Standard Time");
221    map.put("America/Monterrey", "Central Standard Time (Mexico)");
222    map.put("America/Montevideo", "Montevideo Standard Time");
223    map.put("America/Montreal", "Eastern Standard Time");
224    map.put("America/Montserrat", "SA Western Standard Time");
225    map.put("America/Nassau", "Eastern Standard Time");
226    map.put("America/New_York", "Eastern Standard Time");
227    map.put("America/Nipigon", "Eastern Standard Time");
228    map.put("America/Nome", "Alaskan Standard Time");
229    map.put("America/Noronha", "UTC-02");
230    map.put("America/North_Dakota/Beulah", "Central Standard Time");
231    map.put("America/North_Dakota/Center", "Central Standard Time");
232    map.put("America/North_Dakota/New_Salem", "Central Standard Time");
233    map.put("America/Ojinaga", "Mountain Standard Time");
234    map.put("America/Panama", "SA Pacific Standard Time");
235    map.put("America/Pangnirtung", "Eastern Standard Time");
236    map.put("America/Paramaribo", "SA Eastern Standard Time");
237    map.put("America/Phoenix", "US Mountain Standard Time");
238    map.put("America/Port-au-Prince", "Eastern Standard Time");
239    map.put("America/Port_of_Spain", "SA Western Standard Time");
240    map.put("America/Porto_Acre", "SA Pacific Standard Time");
241    map.put("America/Porto_Velho", "SA Western Standard Time");
242    map.put("America/Puerto_Rico", "SA Western Standard Time");
243    map.put("America/Rainy_River", "Central Standard Time");
244    map.put("America/Rankin_Inlet", "Central Standard Time");
245    map.put("America/Recife", "SA Eastern Standard Time");
246    map.put("America/Regina", "Canada Central Standard Time");
247    map.put("America/Resolute", "Central Standard Time");
248    map.put("America/Rio_Branco", "SA Pacific Standard Time");
249    map.put("America/Rosario", "Argentina Standard Time");
250    map.put("America/Santa_Isabel", "Pacific Standard Time (Mexico)");
251    map.put("America/Santarem", "SA Eastern Standard Time");
252    map.put("America/Santiago", "Pacific SA Standard Time");
253    map.put("America/Santo_Domingo", "SA Western Standard Time");
254    map.put("America/Sao_Paulo", "E. South America Standard Time");
255    map.put("America/Scoresbysund", "Azores Standard Time");
256    map.put("America/Shiprock", "Mountain Standard Time");
257    map.put("America/Sitka", "Alaskan Standard Time");
258    map.put("America/St_Barthelemy", "SA Western Standard Time");
259    map.put("America/St_Johns", "Newfoundland Standard Time");
260    map.put("America/St_Kitts", "SA Western Standard Time");
261    map.put("America/St_Lucia", "SA Western Standard Time");
262    map.put("America/St_Thomas", "SA Western Standard Time");
263    map.put("America/St_Vincent", "SA Western Standard Time");
264    map.put("America/Swift_Current", "Canada Central Standard Time");
265    map.put("America/Tegucigalpa", "Central America Standard Time");
266    map.put("America/Thule", "Atlantic Standard Time");
267    map.put("America/Thunder_Bay", "Eastern Standard Time");
268    map.put("America/Tijuana", "Pacific Standard Time");
269    map.put("America/Toronto", "Eastern Standard Time");
270    map.put("America/Tortola", "SA Western Standard Time");
271    map.put("America/Vancouver", "Pacific Standard Time");
272    map.put("America/Virgin", "SA Western Standard Time");
273    map.put("America/Whitehorse", "Pacific Standard Time");
274    map.put("America/Winnipeg", "Central Standard Time");
275    map.put("America/Yakutat", "Alaskan Standard Time");
276    map.put("America/Yellowknife", "Mountain Standard Time");
277    map.put("Antarctica/Casey", "W. Australia Standard Time");
278    map.put("Antarctica/Davis", "SE Asia Standard Time");
279    map.put("Antarctica/DumontDUrville", "West Pacific Standard Time");
280    map.put("Antarctica/Macquarie", "Central Pacific Standard Time");
281    map.put("Antarctica/Mawson", "West Asia Standard Time");
282    map.put("Antarctica/McMurdo", "New Zealand Standard Time");
283    map.put("Antarctica/Palmer", "Pacific SA Standard Time");
284    map.put("Antarctica/Rothera", "SA Eastern Standard Time");
285    map.put("Antarctica/South_Pole", "New Zealand Standard Time");
286    map.put("Antarctica/Syowa", "E. Africa Standard Time");
287    map.put("Antarctica/Vostok", "Central Asia Standard Time");
288    map.put("Arctic/Longyearbyen", "W. Europe Standard Time");
289    map.put("Asia/Aden", "Arab Standard Time");
290    map.put("Asia/Almaty", "Central Asia Standard Time");
291    map.put("Asia/Amman", "Jordan Standard Time");
292    map.put("Asia/Anadyr", "Russia Time Zone 11");
293    map.put("Asia/Aqtau", "West Asia Standard Time");
294    map.put("Asia/Aqtobe", "West Asia Standard Time");
295    map.put("Asia/Ashgabat", "West Asia Standard Time");
296    map.put("Asia/Ashkhabad", "West Asia Standard Time");
297    map.put("Asia/Baghdad", "Arabic Standard Time");
298    map.put("Asia/Bahrain", "Arab Standard Time");
299    map.put("Asia/Baku", "Azerbaijan Standard Time");
300    map.put("Asia/Bangkok", "SE Asia Standard Time");
301    map.put("Asia/Beirut", "Middle East Standard Time");
302    map.put("Asia/Bishkek", "Central Asia Standard Time");
303    map.put("Asia/Brunei", "Singapore Standard Time");
304    map.put("Asia/Calcutta", "India Standard Time");
305    map.put("Asia/Chita", "North Asia East Standard Time");
306    map.put("Asia/Choibalsan", "Ulaanbaatar Standard Time");
307    map.put("Asia/Chongqing", "China Standard Time");
308    map.put("Asia/Chungking", "China Standard Time");
309    map.put("Asia/Colombo", "Sri Lanka Standard Time");
310    map.put("Asia/Dacca", "Bangladesh Standard Time");
311    map.put("Asia/Damascus", "Syria Standard Time");
312    map.put("Asia/Dhaka", "Bangladesh Standard Time");
313    map.put("Asia/Dili", "Tokyo Standard Time");
314    map.put("Asia/Dubai", "Arabian Standard Time");
315    map.put("Asia/Dushanbe", "West Asia Standard Time");
316    map.put("Asia/Harbin", "China Standard Time");
317    map.put("Asia/Ho_Chi_Minh", "SE Asia Standard Time");
318    map.put("Asia/Hong_Kong", "China Standard Time");
319    map.put("Asia/Hovd", "SE Asia Standard Time");
320    map.put("Asia/Irkutsk", "North Asia East Standard Time");
321    map.put("Asia/Istanbul", "Turkey Standard Time");
322    map.put("Asia/Jakarta", "SE Asia Standard Time");
323    map.put("Asia/Jayapura", "Tokyo Standard Time");
324    map.put("Asia/Jerusalem", "Israel Standard Time");
325    map.put("Asia/Kabul", "Afghanistan Standard Time");
326    map.put("Asia/Kamchatka", "Russia Time Zone 11");
327    map.put("Asia/Karachi", "Pakistan Standard Time");
328    map.put("Asia/Kashgar", "Central Asia Standard Time");
329    map.put("Asia/Kathmandu", "Nepal Standard Time");
330    map.put("Asia/Katmandu", "Nepal Standard Time");
331    map.put("Asia/Khandyga", "Yakutsk Standard Time");
332    map.put("Asia/Kolkata", "India Standard Time");
333    map.put("Asia/Krasnoyarsk", "North Asia Standard Time");
334    map.put("Asia/Kuala_Lumpur", "Singapore Standard Time");
335    map.put("Asia/Kuching", "Singapore Standard Time");
336    map.put("Asia/Kuwait", "Arab Standard Time");
337    map.put("Asia/Macao", "China Standard Time");
338    map.put("Asia/Macau", "China Standard Time");
339    map.put("Asia/Magadan", "Magadan Standard Time");
340    map.put("Asia/Makassar", "Singapore Standard Time");
341    map.put("Asia/Manila", "Singapore Standard Time");
342    map.put("Asia/Muscat", "Arabian Standard Time");
343    map.put("Asia/Nicosia", "GTB Standard Time");
344    map.put("Asia/Novokuznetsk", "North Asia Standard Time");
345    map.put("Asia/Novosibirsk", "N. Central Asia Standard Time");
346    map.put("Asia/Omsk", "N. Central Asia Standard Time");
347    map.put("Asia/Oral", "West Asia Standard Time");
348    map.put("Asia/Phnom_Penh", "SE Asia Standard Time");
349    map.put("Asia/Pontianak", "SE Asia Standard Time");
350    map.put("Asia/Pyongyang", "Korea Standard Time");
351    map.put("Asia/Qatar", "Arab Standard Time");
352    map.put("Asia/Qyzylorda", "Central Asia Standard Time");
353    map.put("Asia/Rangoon", "Myanmar Standard Time");
354    map.put("Asia/Riyadh", "Arab Standard Time");
355    map.put("Asia/Saigon", "SE Asia Standard Time");
356    map.put("Asia/Sakhalin", "Vladivostok Standard Time");
357    map.put("Asia/Samarkand", "West Asia Standard Time");
358    map.put("Asia/Seoul", "Korea Standard Time");
359    map.put("Asia/Shanghai", "China Standard Time");
360    map.put("Asia/Singapore", "Singapore Standard Time");
361    map.put("Asia/Srednekolymsk", "Russia Time Zone 10");
362    map.put("Asia/Taipei", "Taipei Standard Time");
363    map.put("Asia/Tashkent", "West Asia Standard Time");
364    map.put("Asia/Tbilisi", "Georgian Standard Time");
365    map.put("Asia/Tehran", "Iran Standard Time");
366    map.put("Asia/Tel_Aviv", "Israel Standard Time");
367    map.put("Asia/Thimbu", "Bangladesh Standard Time");
368    map.put("Asia/Thimphu", "Bangladesh Standard Time");
369    map.put("Asia/Tokyo", "Tokyo Standard Time");
370    map.put("Asia/Ujung_Pandang", "Singapore Standard Time");
371    map.put("Asia/Ulaanbaatar", "Ulaanbaatar Standard Time");
372    map.put("Asia/Ulan_Bator", "Ulaanbaatar Standard Time");
373    map.put("Asia/Urumqi", "Central Asia Standard Time");
374    map.put("Asia/Ust-Nera", "Vladivostok Standard Time");
375    map.put("Asia/Vientiane", "SE Asia Standard Time");
376    map.put("Asia/Vladivostok", "Vladivostok Standard Time");
377    map.put("Asia/Yakutsk", "Yakutsk Standard Time");
378    map.put("Asia/Yekaterinburg", "Ekaterinburg Standard Time");
379    map.put("Asia/Yerevan", "Caucasus Standard Time");
380    map.put("Atlantic/Azores", "Azores Standard Time");
381    map.put("Atlantic/Bermuda", "Atlantic Standard Time");
382    map.put("Atlantic/Canary", "GMT Standard Time");
383    map.put("Atlantic/Cape_Verde", "Cape Verde Standard Time");
384    map.put("Atlantic/Faeroe", "GMT Standard Time");
385    map.put("Atlantic/Faroe", "GMT Standard Time");
386    map.put("Atlantic/Jan_Mayen", "W. Europe Standard Time");
387    map.put("Atlantic/Madeira", "GMT Standard Time");
388    map.put("Atlantic/Reykjavik", "Greenwich Standard Time");
389    map.put("Atlantic/South_Georgia", "UTC-02");
390    map.put("Atlantic/St_Helena", "Greenwich Standard Time");
391    map.put("Atlantic/Stanley", "SA Eastern Standard Time");
392    map.put("Australia/ACT", "AUS Eastern Standard Time");
393    map.put("Australia/Adelaide", "Cen. Australia Standard Time");
394    map.put("Australia/Brisbane", "E. Australia Standard Time");
395    map.put("Australia/Broken_Hill", "Cen. Australia Standard Time");
396    map.put("Australia/Canberra", "AUS Eastern Standard Time");
397    map.put("Australia/Currie", "Tasmania Standard Time");
398    map.put("Australia/Darwin", "AUS Central Standard Time");
399    map.put("Australia/Hobart", "Tasmania Standard Time");
400    map.put("Australia/Lindeman", "E. Australia Standard Time");
401    map.put("Australia/Melbourne", "AUS Eastern Standard Time");
402    map.put("Australia/NSW", "AUS Eastern Standard Time");
403    map.put("Australia/North", "AUS Central Standard Time");
404    map.put("Australia/Perth", "W. Australia Standard Time");
405    map.put("Australia/Queensland", "E. Australia Standard Time");
406    map.put("Australia/South", "Cen. Australia Standard Time");
407    map.put("Australia/Sydney", "AUS Eastern Standard Time");
408    map.put("Australia/Tasmania", "Tasmania Standard Time");
409    map.put("Australia/Victoria", "AUS Eastern Standard Time");
410    map.put("Australia/West", "W. Australia Standard Time");
411    map.put("Australia/Yancowinna", "Cen. Australia Standard Time");
412    map.put("Brazil/Acre", "SA Pacific Standard Time");
413    map.put("Brazil/DeNoronha", "UTC-02");
414    map.put("Brazil/East", "E. South America Standard Time");
415    map.put("Brazil/West", "SA Western Standard Time");
416    map.put("CST6CDT", "Central Standard Time");
417    map.put("Canada/Atlantic", "Atlantic Standard Time");
418    map.put("Canada/Central", "Central Standard Time");
419    map.put("Canada/East-Saskatchewan", "Canada Central Standard Time");
420    map.put("Canada/Eastern", "Eastern Standard Time");
421    map.put("Canada/Mountain", "Mountain Standard Time");
422    map.put("Canada/Newfoundland", "Newfoundland Standard Time");
423    map.put("Canada/Pacific", "Pacific Standard Time");
424    map.put("Canada/Saskatchewan", "Canada Central Standard Time");
425    map.put("Canada/Yukon", "Pacific Standard Time");
426    map.put("Chile/Continental", "Pacific SA Standard Time");
427    map.put("Cuba", "Eastern Standard Time");
428    map.put("EST", "SA Pacific Standard Time");
429    map.put("EST5EDT", "Eastern Standard Time");
430    map.put("Egypt", "Egypt Standard Time");
431    map.put("Eire", "GMT Standard Time");
432    map.put("Etc/GMT", "UTC");
433    map.put("Etc/GMT+0", "UTC");
434    map.put("Etc/GMT+1", "Cape Verde Standard Time");
435    map.put("Etc/GMT+10", "Hawaiian Standard Time");
436    map.put("Etc/GMT+11", "UTC-11");
437    map.put("Etc/GMT+12", "Dateline Standard Time");
438    map.put("Etc/GMT+2", "UTC-02");
439    map.put("Etc/GMT+3", "SA Eastern Standard Time");
440    map.put("Etc/GMT+4", "SA Western Standard Time");
441    map.put("Etc/GMT+5", "SA Pacific Standard Time");
442    map.put("Etc/GMT+6", "Central America Standard Time");
443    map.put("Etc/GMT+7", "US Mountain Standard Time");
444    map.put("Etc/GMT-0", "UTC");
445    map.put("Etc/GMT-1", "W. Central Africa Standard Time");
446    map.put("Etc/GMT-10", "West Pacific Standard Time");
447    map.put("Etc/GMT-11", "Central Pacific Standard Time");
448    map.put("Etc/GMT-12", "UTC+12");
449    map.put("Etc/GMT-13", "Tonga Standard Time");
450    map.put("Etc/GMT-14", "Line Islands Standard Time");
451    map.put("Etc/GMT-2", "South Africa Standard Time");
452    map.put("Etc/GMT-3", "E. Africa Standard Time");
453    map.put("Etc/GMT-4", "Arabian Standard Time");
454    map.put("Etc/GMT-5", "West Asia Standard Time");
455    map.put("Etc/GMT-6", "Central Asia Standard Time");
456    map.put("Etc/GMT-7", "SE Asia Standard Time");
457    map.put("Etc/GMT-8", "Singapore Standard Time");
458    map.put("Etc/GMT-9", "Tokyo Standard Time");
459    map.put("Etc/GMT0", "UTC");
460    map.put("Etc/Greenwich", "UTC");
461    map.put("Etc/UCT", "UTC");
462    map.put("Etc/UTC", "UTC");
463    map.put("Etc/Universal", "UTC");
464    map.put("Etc/Zulu", "UTC");
465    map.put("Europe/Amsterdam", "W. Europe Standard Time");
466    map.put("Europe/Andorra", "W. Europe Standard Time");
467    map.put("Europe/Athens", "GTB Standard Time");
468    map.put("Europe/Belfast", "GMT Standard Time");
469    map.put("Europe/Belgrade", "Central Europe Standard Time");
470    map.put("Europe/Berlin", "W. Europe Standard Time");
471    map.put("Europe/Bratislava", "Central Europe Standard Time");
472    map.put("Europe/Brussels", "Romance Standard Time");
473    map.put("Europe/Bucharest", "GTB Standard Time");
474    map.put("Europe/Budapest", "Central Europe Standard Time");
475    map.put("Europe/Busingen", "W. Europe Standard Time");
476    map.put("Europe/Chisinau", "GTB Standard Time");
477    map.put("Europe/Copenhagen", "Romance Standard Time");
478    map.put("Europe/Dublin", "GMT Standard Time");
479    map.put("Europe/Gibraltar", "W. Europe Standard Time");
480    map.put("Europe/Guernsey", "GMT Standard Time");
481    map.put("Europe/Helsinki", "FLE Standard Time");
482    map.put("Europe/Isle_of_Man", "GMT Standard Time");
483    map.put("Europe/Istanbul", "Turkey Standard Time");
484    map.put("Europe/Jersey", "GMT Standard Time");
485    map.put("Europe/Kaliningrad", "Kaliningrad Standard Time");
486    map.put("Europe/Kiev", "FLE Standard Time");
487    map.put("Europe/Lisbon", "GMT Standard Time");
488    map.put("Europe/Ljubljana", "Central Europe Standard Time");
489    map.put("Europe/London", "GMT Standard Time");
490    map.put("Europe/Luxembourg", "W. Europe Standard Time");
491    map.put("Europe/Madrid", "Romance Standard Time");
492    map.put("Europe/Malta", "W. Europe Standard Time");
493    map.put("Europe/Mariehamn", "FLE Standard Time");
494    map.put("Europe/Minsk", "Belarus Standard Time");
495    map.put("Europe/Monaco", "W. Europe Standard Time");
496    map.put("Europe/Moscow", "Russian Standard Time");
497    map.put("Europe/Nicosia", "GTB Standard Time");
498    map.put("Europe/Oslo", "W. Europe Standard Time");
499    map.put("Europe/Paris", "Romance Standard Time");
500    map.put("Europe/Podgorica", "Central Europe Standard Time");
501    map.put("Europe/Prague", "Central Europe Standard Time");
502    map.put("Europe/Riga", "FLE Standard Time");
503    map.put("Europe/Rome", "W. Europe Standard Time");
504    map.put("Europe/Samara", "Russia Time Zone 3");
505    map.put("Europe/San_Marino", "W. Europe Standard Time");
506    map.put("Europe/Sarajevo", "Central European Standard Time");
507    map.put("Europe/Simferopol", "Russian Standard Time");
508    map.put("Europe/Skopje", "Central European Standard Time");
509    map.put("Europe/Sofia", "FLE Standard Time");
510    map.put("Europe/Stockholm", "W. Europe Standard Time");
511    map.put("Europe/Tallinn", "FLE Standard Time");
512    map.put("Europe/Tirane", "Central Europe Standard Time");
513    map.put("Europe/Tiraspol", "GTB Standard Time");
514    map.put("Europe/Uzhgorod", "FLE Standard Time");
515    map.put("Europe/Vaduz", "W. Europe Standard Time");
516    map.put("Europe/Vatican", "W. Europe Standard Time");
517    map.put("Europe/Vienna", "W. Europe Standard Time");
518    map.put("Europe/Vilnius", "FLE Standard Time");
519    map.put("Europe/Volgograd", "Russian Standard Time");
520    map.put("Europe/Warsaw", "Central European Standard Time");
521    map.put("Europe/Zagreb", "Central European Standard Time");
522    map.put("Europe/Zaporozhye", "FLE Standard Time");
523    map.put("Europe/Zurich", "W. Europe Standard Time");
524    map.put("GB", "GMT Standard Time");
525    map.put("GB-Eire", "GMT Standard Time");
526    map.put("GMT", "UTC");
527    map.put("GMT+0", "UTC");
528    map.put("GMT-0", "UTC");
529    map.put("GMT0", "UTC");
530    map.put("Greenwich", "UTC");
531    map.put("HST", "Hawaiian Standard Time");
532    map.put("Hongkong", "China Standard Time");
533    map.put("Iceland", "Greenwich Standard Time");
534    map.put("Indian/Antananarivo", "E. Africa Standard Time");
535    map.put("Indian/Chagos", "Central Asia Standard Time");
536    map.put("Indian/Christmas", "SE Asia Standard Time");
537    map.put("Indian/Cocos", "Myanmar Standard Time");
538    map.put("Indian/Comoro", "E. Africa Standard Time");
539    map.put("Indian/Kerguelen", "West Asia Standard Time");
540    map.put("Indian/Mahe", "Mauritius Standard Time");
541    map.put("Indian/Maldives", "West Asia Standard Time");
542    map.put("Indian/Mauritius", "Mauritius Standard Time");
543    map.put("Indian/Mayotte", "E. Africa Standard Time");
544    map.put("Indian/Reunion", "Mauritius Standard Time");
545    map.put("Iran", "Iran Standard Time");
546    map.put("Israel", "Israel Standard Time");
547    map.put("Jamaica", "SA Pacific Standard Time");
548    map.put("Japan", "Tokyo Standard Time");
549    map.put("Kwajalein", "UTC+12");
550    map.put("Libya", "Libya Standard Time");
551    map.put("MST", "US Mountain Standard Time");
552    map.put("MST7MDT", "Mountain Standard Time");
553    map.put("Mexico/BajaNorte", "Pacific Standard Time");
554    map.put("Mexico/BajaSur", "Mountain Standard Time (Mexico)");
555    map.put("Mexico/General", "Central Standard Time (Mexico)");
556    map.put("NZ", "New Zealand Standard Time");
557    map.put("Navajo", "Mountain Standard Time");
558    map.put("PRC", "China Standard Time");
559    map.put("PST8PDT", "Pacific Standard Time");
560    map.put("Pacific/Apia", "Samoa Standard Time");
561    map.put("Pacific/Auckland", "New Zealand Standard Time");
562    map.put("Pacific/Bougainville", "Central Pacific Standard Time");
563    map.put("Pacific/Chuuk", "West Pacific Standard Time");
564    map.put("Pacific/Efate", "Central Pacific Standard Time");
565    map.put("Pacific/Enderbury", "Tonga Standard Time");
566    map.put("Pacific/Fakaofo", "Tonga Standard Time");
567    map.put("Pacific/Fiji", "Fiji Standard Time");
568    map.put("Pacific/Funafuti", "UTC+12");
569    map.put("Pacific/Galapagos", "Central America Standard Time");
570    map.put("Pacific/Guadalcanal", "Central Pacific Standard Time");
571    map.put("Pacific/Guam", "West Pacific Standard Time");
572    map.put("Pacific/Honolulu", "Hawaiian Standard Time");
573    map.put("Pacific/Johnston", "Hawaiian Standard Time");
574    map.put("Pacific/Kiritimati", "Line Islands Standard Time");
575    map.put("Pacific/Kosrae", "Central Pacific Standard Time");
576    map.put("Pacific/Kwajalein", "UTC+12");
577    map.put("Pacific/Majuro", "UTC+12");
578    map.put("Pacific/Midway", "UTC-11");
579    map.put("Pacific/Nauru", "UTC+12");
580    map.put("Pacific/Niue", "UTC-11");
581    map.put("Pacific/Noumea", "Central Pacific Standard Time");
582    map.put("Pacific/Pago_Pago", "UTC-11");
583    map.put("Pacific/Palau", "Tokyo Standard Time");
584    map.put("Pacific/Pohnpei", "Central Pacific Standard Time");
585    map.put("Pacific/Ponape", "Central Pacific Standard Time");
586    map.put("Pacific/Port_Moresby", "West Pacific Standard Time");
587    map.put("Pacific/Rarotonga", "Hawaiian Standard Time");
588    map.put("Pacific/Saipan", "West Pacific Standard Time");
589    map.put("Pacific/Samoa", "UTC-11");
590    map.put("Pacific/Tahiti", "Hawaiian Standard Time");
591    map.put("Pacific/Tarawa", "UTC+12");
592    map.put("Pacific/Tongatapu", "Tonga Standard Time");
593    map.put("Pacific/Truk", "West Pacific Standard Time");
594    map.put("Pacific/Wake", "UTC+12");
595    map.put("Pacific/Wallis", "UTC+12");
596    map.put("Pacific/Yap", "West Pacific Standard Time");
597    map.put("Poland", "Central European Standard Time");
598    map.put("Portugal", "GMT Standard Time");
599    map.put("ROC", "Taipei Standard Time");
600    map.put("ROK", "Korea Standard Time");
601    map.put("Singapore", "Singapore Standard Time");
602    map.put("Turkey", "Turkey Standard Time");
603    map.put("UCT", "UTC");
604    map.put("US/Alaska", "Alaskan Standard Time");
605    map.put("US/Arizona", "US Mountain Standard Time");
606    map.put("US/Central", "Central Standard Time");
607    map.put("US/East-Indiana", "US Eastern Standard Time");
608    map.put("US/Eastern", "Eastern Standard Time");
609    map.put("US/Hawaii", "Hawaiian Standard Time");
610    map.put("US/Indiana-Starke", "Central Standard Time");
611    map.put("US/Michigan", "Eastern Standard Time");
612    map.put("US/Mountain", "Mountain Standard Time");
613    map.put("US/Pacific", "Pacific Standard Time");
614    map.put("US/Pacific-New", "Pacific Standard Time");
615    map.put("US/Samoa", "UTC-11");
616    map.put("UTC", "UTC");
617    map.put("Universal", "UTC");
618    map.put("W-SU", "Russian Standard Time");
619    map.put("Zulu", "UTC");
620    //additions outside of Unicode list
621    map.put("America/Adak", "Hawaiian Standard Time,(UTC-10:00) Hawaii");
622    map.put("America/Atka", "Hawaiian Standard Time,(UTC-10:00) Hawaii");
623    map.put("America/Metlakatla", "Pacific Standard Time");
624    map.put("America/Miquelon", "South America Standard Time");
625    map.put("Asia/Gaza", "Middle East Standard Time");
626    return map;
627  }
628
629}