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    
024    package microsoft.exchange.webservices.data.util;
025    
026    import java.util.HashMap;
027    import java.util.Map;
028    import java.util.TimeZone;
029    
030    /**
031     * Miscellany timezone functions
032     */
033    public 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    }