Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/mysql/jdbc/TimeUtil.java


1   /*
2    Copyright (C) 2002-2004 MySQL AB
3   
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of version 2 of the GNU General Public License as
6    published by the Free Software Foundation.
7    
8   
9    There are special exceptions to the terms and conditions of the GPL 
10   as it is applied to this software. View the full text of the 
11   exception exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
12   software distribution.
13  
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18  
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  
23   */
24  package com.mysql.jdbc;
25  
26  import java.sql.Time;
27  import java.sql.Timestamp;
28  import java.util.Calendar;
29  import java.util.Collections;
30  import java.util.HashMap;
31  import java.util.Map;
32  import java.util.TimeZone;
33  
34  
35  /**
36   * Timezone conversion routines
37   *
38   * @author Mark Matthews
39   */
40  public class TimeUtil {
41      static final TimeZone GMT_TIMEZONE = TimeZone.getTimeZone("GMT");
42      static final Map TIMEZONE_MAPPINGS;
43      static final Map ABBREVIATED_TIMEZONES;
44  
45      static {
46          HashMap tempMap = new HashMap();
47  
48          //
49          // Windows Mappings
50          //
51          tempMap.put("Romance", "Europe/Paris");
52          tempMap.put("Romance Standard Time", "Europe/Paris");
53          tempMap.put("Warsaw", "Europe/Warsaw");
54          tempMap.put("Central Europe", "Europe/Prague");
55          tempMap.put("Central Europe Standard Time", "Europe/Prague");
56          tempMap.put("Prague Bratislava", "Europe/Prague");
57          tempMap.put("W. Central Africa Standard Time", "Africa/Luanda");
58          tempMap.put("FLE", "Europe/Helsinki");
59          tempMap.put("FLE Standard Time", "Europe/Helsinki");
60          tempMap.put("GFT", "Europe/Athens");
61          tempMap.put("GFT Standard Time", "Europe/Athens");
62          tempMap.put("GTB", "Europe/Athens");
63          tempMap.put("GTB Standard Time", "Europe/Athens");
64          tempMap.put("Israel", "Asia/Jerusalem");
65          tempMap.put("Israel Standard Time", "Asia/Jerusalem");
66          tempMap.put("Arab", "Asia/Riyadh");
67          tempMap.put("Arab Standard Time", "Asia/Riyadh");
68          tempMap.put("Arabic Standard Time", "Asia/Baghdad");
69          tempMap.put("E. Africa", "Africa/Nairobi");
70          tempMap.put("E. Africa Standard Time", "Africa/Nairobi");
71          tempMap.put("Saudi Arabia", "Asia/Riyadh");
72          tempMap.put("Saudi Arabia Standard Time", "Asia/Riyadh");
73          tempMap.put("Iran", "Asia/Tehran");
74          tempMap.put("Iran Standard Time", "Asia/Tehran");
75          tempMap.put("Afghanistan", "Asia/Kabul");
76          tempMap.put("Afghanistan Standard Time", "Asia/Kabul");
77          tempMap.put("India", "Asia/Calcutta");
78          tempMap.put("India Standard Time", "Asia/Calcutta");
79          tempMap.put("Myanmar Standard Time", "Asia/Rangoon");
80          tempMap.put("Nepal Standard Time", "Asia/Katmandu");
81          tempMap.put("Sri Lanka", "Asia/Colombo");
82          tempMap.put("Sri Lanka Standard Time", "Asia/Colombo");
83          tempMap.put("Beijing", "Asia/Shanghai");
84          tempMap.put("China", "Asia/Shanghai");
85          tempMap.put("China Standard Time", "Asia/Shanghai");
86          tempMap.put("AUS Central", "Australia/Darwin");
87          tempMap.put("AUS Central Standard Time", "Australia/Darwin");
88          tempMap.put("Cen. Australia", "Australia/Adelaide");
89          tempMap.put("Cen. Australia Standard Time", "Australia/Adelaide");
90          tempMap.put("Vladivostok", "Asia/Vladivostok");
91          tempMap.put("Vladivostok Standard Time", "Asia/Vladivostok");
92          tempMap.put("West Pacific", "Pacific/Guam");
93          tempMap.put("West Pacific Standard Time", "Pacific/Guam");
94          tempMap.put("E. South America", "America/Sao_Paulo");
95          tempMap.put("E. South America Standard Time", "America/Sao_Paulo");
96          tempMap.put("Greenland Standard Time", "America/Godthab");
97          tempMap.put("Newfoundland", "America/St_Johns");
98          tempMap.put("Newfoundland Standard Time", "America/St_Johns");
99          tempMap.put("Pacific SA", "America/Caracas");
100         tempMap.put("Pacific SA Standard Time", "America/Caracas");
101         tempMap.put("SA Western", "America/Caracas");
102         tempMap.put("SA Western Standard Time", "America/Caracas");
103         tempMap.put("SA Pacific", "America/Bogota");
104         tempMap.put("SA Pacific Standard Time", "America/Bogota");
105         tempMap.put("US Eastern", "America/Indianapolis");
106         tempMap.put("US Eastern Standard Time", "America/Indianapolis");
107         tempMap.put("Central America Standard Time", "America/Regina");
108         tempMap.put("Mexico", "America/Mexico_City");
109         tempMap.put("Mexico Standard Time", "America/Mexico_City");
110         tempMap.put("Canada Central", "America/Regina");
111         tempMap.put("Canada Central Standard Time", "America/Regina");
112         tempMap.put("US Mountain", "America/Phoenix");
113         tempMap.put("US Mountain Standard Time", "America/Phoenix");
114         tempMap.put("GMT", "Europe/London");
115         tempMap.put("GMT Standard Time", "Europe/London");
116         tempMap.put("Ekaterinburg", "Asia/Yekaterinburg");
117         tempMap.put("Ekaterinburg Standard Time", "Asia/Yekaterinburg");
118         tempMap.put("West Asia", "Asia/Karachi");
119         tempMap.put("West Asia Standard Time", "Asia/Karachi");
120         tempMap.put("Central Asia", "Asia/Dhaka");
121         tempMap.put("Central Asia Standard Time", "Asia/Dhaka");
122         tempMap.put("N. Central Asia Standard Time", "Asia/Novosibirsk");
123         tempMap.put("Bangkok", "Asia/Bangkok");
124         tempMap.put("Bangkok Standard Time", "Asia/Bangkok");
125         tempMap.put("North Asia Standard Time", "Asia/Krasnoyarsk");
126         tempMap.put("SE Asia", "Asia/Bangkok");
127         tempMap.put("SE Asia Standard Time", "Asia/Bangkok");
128         tempMap.put("North Asia East Standard Time", "Asia/Ulaanbaatar");
129         tempMap.put("Singapore", "Asia/Singapore");
130         tempMap.put("Singapore Standard Time", "Asia/Singapore");
131         tempMap.put("Taipei", "Asia/Taipei");
132         tempMap.put("Taipei Standard Time", "Asia/Taipei");
133         tempMap.put("W. Australia", "Australia/Perth");
134         tempMap.put("W. Australia Standard Time", "Australia/Perth");
135         tempMap.put("Korea", "Asia/Seoul");
136         tempMap.put("Korea Standard Time", "Asia/Seoul");
137         tempMap.put("Tokyo", "Asia/Tokyo");
138         tempMap.put("Tokyo Standard Time", "Asia/Tokyo");
139         tempMap.put("Yakutsk", "Asia/Yakutsk");
140         tempMap.put("Yakutsk Standard Time", "Asia/Yakutsk");
141         tempMap.put("Central European", "Europe/Belgrade");
142         tempMap.put("Central European Standard Time", "Europe/Belgrade");
143         tempMap.put("W. Europe", "Europe/Berlin");
144         tempMap.put("W. Europe Standard Time", "Europe/Berlin");
145         tempMap.put("Tasmania", "Australia/Hobart");
146         tempMap.put("Tasmania Standard Time", "Australia/Hobart");
147         tempMap.put("AUS Eastern", "Australia/Sydney");
148         tempMap.put("AUS Eastern Standard Time", "Australia/Sydney");
149         tempMap.put("E. Australia", "Australia/Brisbane");
150         tempMap.put("E. Australia Standard Time", "Australia/Brisbane");
151         tempMap.put("Sydney Standard Time", "Australia/Sydney");
152         tempMap.put("Central Pacific", "Pacific/Guadalcanal");
153         tempMap.put("Central Pacific Standard Time", "Pacific/Guadalcanal");
154         tempMap.put("Dateline", "Pacific/Majuro");
155         tempMap.put("Dateline Standard Time", "Pacific/Majuro");
156         tempMap.put("Fiji", "Pacific/Fiji");
157         tempMap.put("Fiji Standard Time", "Pacific/Fiji");
158         tempMap.put("Samoa", "Pacific/Apia");
159         tempMap.put("Samoa Standard Time", "Pacific/Apia");
160         tempMap.put("Hawaiian", "Pacific/Honolulu");
161         tempMap.put("Hawaiian Standard Time", "Pacific/Honolulu");
162         tempMap.put("Alaskan", "America/Anchorage");
163         tempMap.put("Alaskan Standard Time", "America/Anchorage");
164         tempMap.put("Pacific", "America/Los_Angeles");
165         tempMap.put("Pacific Standard Time", "America/Los_Angeles");
166         tempMap.put("Mexico Standard Time 2", "America/Chihuahua");
167         tempMap.put("Mountain", "America/Denver");
168         tempMap.put("Mountain Standard Time", "America/Denver");
169         tempMap.put("Central", "America/Chicago");
170         tempMap.put("Central Standard Time", "America/Chicago");
171         tempMap.put("Eastern", "America/New_York");
172         tempMap.put("Eastern Standard Time", "America/New_York");
173         tempMap.put("E. Europe", "Europe/Bucharest");
174         tempMap.put("E. Europe Standard Time", "Europe/Bucharest");
175         tempMap.put("Egypt", "Africa/Cairo");
176         tempMap.put("Egypt Standard Time", "Africa/Cairo");
177         tempMap.put("South Africa", "Africa/Harare");
178         tempMap.put("South Africa Standard Time", "Africa/Harare");
179         tempMap.put("Atlantic", "America/Halifax");
180         tempMap.put("Atlantic Standard Time", "America/Halifax");
181         tempMap.put("SA Eastern", "America/Buenos_Aires");
182         tempMap.put("SA Eastern Standard Time", "America/Buenos_Aires");
183         tempMap.put("Mid-Atlantic", "Atlantic/South_Georgia");
184         tempMap.put("Mid-Atlantic Standard Time", "Atlantic/South_Georgia");
185         tempMap.put("Azores", "Atlantic/Azores");
186         tempMap.put("Azores Standard Time", "Atlantic/Azores");
187         tempMap.put("Cape Verde Standard Time", "Atlantic/Cape_Verde");
188         tempMap.put("Russian", "Europe/Moscow");
189         tempMap.put("Russian Standard Time", "Europe/Moscow");
190         tempMap.put("New Zealand", "Pacific/Auckland");
191         tempMap.put("New Zealand Standard Time", "Pacific/Auckland");
192         tempMap.put("Tonga Standard Time", "Pacific/Tongatapu");
193         tempMap.put("Arabian", "Asia/Muscat");
194         tempMap.put("Arabian Standard Time", "Asia/Muscat");
195         tempMap.put("Caucasus", "Asia/Tbilisi");
196         tempMap.put("Caucasus Standard Time", "Asia/Tbilisi");
197         tempMap.put("GMT Standard Time", "GMT");
198         tempMap.put("Greenwich", "GMT");
199         tempMap.put("Greenwich Standard Time", "GMT");
200         tempMap.put("UTC", "GMT");
201 
202         TIMEZONE_MAPPINGS = Collections.unmodifiableMap(tempMap);
203 
204         //
205         // Handle abbreviated mappings
206         //
207         tempMap = new HashMap();
208 
209         tempMap.put("ACST", new String[] { "America/Porto_Acre" });
210         tempMap.put("ACT", new String[] { "America/Porto_Acre" });
211         tempMap.put("ADDT", new String[] { "America/Pangnirtung" });
212         tempMap.put("ADMT",
213             new String[] { "Africa/Asmera", "Africa/Addis_Ababa" });
214         tempMap.put("ADT",
215             new String[] {
216                 "Atlantic/Bermuda", "Asia/Baghdad", "America/Thule",
217                 "America/Goose_Bay", "America/Halifax", "America/Glace_Bay",
218                 "America/Pangnirtung", "America/Barbados", "America/Martinique"
219             });
220         tempMap.put("AFT", new String[] { "Asia/Kabul" });
221         tempMap.put("AHDT", new String[] { "America/Anchorage" });
222         tempMap.put("AHST", new String[] { "America/Anchorage" });
223         tempMap.put("AHWT", new String[] { "America/Anchorage" });
224         tempMap.put("AKDT",
225             new String[] {
226                 "America/Juneau", "America/Yakutat", "America/Anchorage",
227                 "America/Nome"
228             });
229         tempMap.put("AKST",
230             new String[] {
231                 "Asia/Aqtobe", "America/Juneau", "America/Yakutat",
232                 "America/Anchorage", "America/Nome"
233             });
234         tempMap.put("AKT", new String[] { "Asia/Aqtobe" });
235         tempMap.put("AKTST", new String[] { "Asia/Aqtobe" });
236         tempMap.put("AKWT",
237             new String[] {
238                 "America/Juneau", "America/Yakutat", "America/Anchorage",
239                 "America/Nome"
240             });
241         tempMap.put("ALMST", new String[] { "Asia/Almaty" });
242         tempMap.put("ALMT", new String[] { "Asia/Almaty" });
243         tempMap.put("AMST",
244             new String[] {
245                 "Asia/Yerevan", "America/Cuiaba", "America/Porto_Velho",
246                 "America/Boa_Vista", "America/Manaus"
247             });
248         tempMap.put("AMT",
249             new String[] {
250                 "Europe/Athens", "Europe/Amsterdam", "Asia/Yerevan",
251                 "Africa/Asmera", "America/Cuiaba", "America/Porto_Velho",
252                 "America/Boa_Vista", "America/Manaus", "America/Asuncion"
253             });
254         tempMap.put("ANAMT", new String[] { "Asia/Anadyr" });
255         tempMap.put("ANAST", new String[] { "Asia/Anadyr" });
256         tempMap.put("ANAT", new String[] { "Asia/Anadyr" });
257         tempMap.put("ANT", new String[] { "America/Aruba", "America/Curacao" });
258         tempMap.put("AQTST", new String[] { "Asia/Aqtobe", "Asia/Aqtau" });
259         tempMap.put("AQTT", new String[] { "Asia/Aqtobe", "Asia/Aqtau" });
260         tempMap.put("ARST",
261             new String[] {
262                 "Antarctica/Palmer", "America/Buenos_Aires", "America/Rosario",
263                 "America/Cordoba", "America/Jujuy", "America/Catamarca",
264                 "America/Mendoza"
265             });
266         tempMap.put("ART",
267             new String[] {
268                 "Antarctica/Palmer", "America/Buenos_Aires", "America/Rosario",
269                 "America/Cordoba", "America/Jujuy", "America/Catamarca",
270                 "America/Mendoza"
271             });
272         tempMap.put("ASHST", new String[] { "Asia/Ashkhabad" });
273         tempMap.put("ASHT", new String[] { "Asia/Ashkhabad" });
274         tempMap.put("AST",
275             new String[] {
276                 "Atlantic/Bermuda", "Asia/Bahrain", "Asia/Baghdad",
277                 "Asia/Kuwait", "Asia/Qatar", "Asia/Riyadh", "Asia/Aden",
278                 "America/Thule", "America/Goose_Bay", "America/Halifax",
279                 "America/Glace_Bay", "America/Pangnirtung", "America/Anguilla",
280                 "America/Antigua", "America/Barbados", "America/Dominica",
281                 "America/Santo_Domingo", "America/Grenada", "America/Guadeloupe",
282                 "America/Martinique", "America/Montserrat",
283                 "America/Puerto_Rico", "America/St_Kitts", "America/St_Lucia",
284                 "America/Miquelon", "America/St_Vincent", "America/Tortola",
285                 "America/St_Thomas", "America/Aruba", "America/Curacao",
286                 "America/Port_of_Spain"
287             });
288         tempMap.put("AWT", new String[] { "America/Puerto_Rico" });
289         tempMap.put("AZOST", new String[] { "Atlantic/Azores" });
290         tempMap.put("AZOT", new String[] { "Atlantic/Azores" });
291         tempMap.put("AZST", new String[] { "Asia/Baku" });
292         tempMap.put("AZT", new String[] { "Asia/Baku" });
293         tempMap.put("BAKST", new String[] { "Asia/Baku" });
294         tempMap.put("BAKT", new String[] { "Asia/Baku" });
295         tempMap.put("BDT",
296             new String[] { "Asia/Dacca", "America/Nome", "America/Adak" });
297         tempMap.put("BEAT",
298             new String[] { "Africa/Nairobi", "Africa/Mogadishu", "Africa/Kampala" });
299         tempMap.put("BEAUT",
300             new String[] {
301                 "Africa/Nairobi", "Africa/Dar_es_Salaam", "Africa/Kampala"
302             });
303         tempMap.put("BMT",
304             new String[] {
305                 "Europe/Brussels", "Europe/Chisinau", "Europe/Tiraspol",
306                 "Europe/Bucharest", "Europe/Zurich", "Asia/Baghdad",
307                 "Asia/Bangkok", "Africa/Banjul", "America/Barbados",
308                 "America/Bogota"
309             });
310         tempMap.put("BNT", new String[] { "Asia/Brunei" });
311         tempMap.put("BORT",
312             new String[] { "Asia/Ujung_Pandang", "Asia/Kuching" });
313         tempMap.put("BOST", new String[] { "America/La_Paz" });
314         tempMap.put("BOT", new String[] { "America/La_Paz" });
315         tempMap.put("BRST",
316             new String[] {
317                 "America/Belem", "America/Fortaleza", "America/Araguaina",
318                 "America/Maceio", "America/Sao_Paulo"
319             });
320         tempMap.put("BRT",
321             new String[] {
322                 "America/Belem", "America/Fortaleza", "America/Araguaina",
323                 "America/Maceio", "America/Sao_Paulo"
324             });
325         tempMap.put("BST",
326             new String[] {
327                 "Europe/London", "Europe/Belfast", "Europe/Dublin",
328                 "Europe/Gibraltar", "Pacific/Pago_Pago", "Pacific/Midway",
329                 "America/Nome", "America/Adak"
330             });
331         tempMap.put("BTT", new String[] { "Asia/Thimbu" });
332         tempMap.put("BURT",
333             new String[] { "Asia/Dacca", "Asia/Rangoon", "Asia/Calcutta" });
334         tempMap.put("BWT", new String[] { "America/Nome", "America/Adak" });
335         tempMap.put("CANT", new String[] { "Atlantic/Canary" });
336         tempMap.put("CAST",
337             new String[] { "Africa/Gaborone", "Africa/Khartoum" });
338         tempMap.put("CAT",
339             new String[] {
340                 "Africa/Gaborone", "Africa/Bujumbura", "Africa/Lubumbashi",
341                 "Africa/Blantyre", "Africa/Maputo", "Africa/Windhoek",
342                 "Africa/Kigali", "Africa/Khartoum", "Africa/Lusaka",
343                 "Africa/Harare", "America/Anchorage"
344             });
345         tempMap.put("CCT", new String[] { "Indian/Cocos" });
346         tempMap.put("CDDT", new String[] { "America/Rankin_Inlet" });
347         tempMap.put("CDT",
348             new String[] {
349                 "Asia/Harbin", "Asia/Shanghai", "Asia/Chungking", "Asia/Urumqi",
350                 "Asia/Kashgar", "Asia/Taipei", "Asia/Macao", "America/Chicago",
351                 "America/Indianapolis", "America/Indiana/Marengo",
352                 "America/Indiana/Knox", "America/Indiana/Vevay",
353                 "America/Louisville", "America/Menominee", "America/Rainy_River",
354                 "America/Winnipeg", "America/Pangnirtung", "America/Iqaluit",
355                 "America/Rankin_Inlet", "America/Cambridge_Bay",
356                 "America/Cancun", "America/Mexico_City", "America/Chihuahua",
357                 "America/Belize", "America/Costa_Rica", "America/Havana",
358                 "America/El_Salvador", "America/Guatemala",
359                 "America/Tegucigalpa", "America/Managua"
360             });
361         tempMap.put("CEST",
362             new String[] {
363                 "Europe/Tirane", "Europe/Andorra", "Europe/Vienna",
364                 "Europe/Minsk", "Europe/Brussels", "Europe/Sofia",
365                 "Europe/Prague", "Europe/Copenhagen", "Europe/Tallinn",
366                 "Europe/Berlin", "Europe/Gibraltar", "Europe/Athens",
367                 "Europe/Budapest", "Europe/Rome", "Europe/Riga", "Europe/Vaduz",
368                 "Europe/Vilnius", "Europe/Luxembourg", "Europe/Malta",
369                 "Europe/Chisinau", "Europe/Tiraspol", "Europe/Monaco",
370                 "Europe/Amsterdam", "Europe/Oslo", "Europe/Warsaw",
371                 "Europe/Lisbon", "Europe/Kaliningrad", "Europe/Madrid",
372                 "Europe/Stockholm", "Europe/Zurich", "Europe/Kiev",
373                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol",
374                 "Europe/Belgrade", "Africa/Algiers", "Africa/Tripoli",
375                 "Africa/Tunis", "Africa/Ceuta"
376             });
377         tempMap.put("CET",
378             new String[] {
379                 "Europe/Tirane", "Europe/Andorra", "Europe/Vienna",
380                 "Europe/Minsk", "Europe/Brussels", "Europe/Sofia",
381                 "Europe/Prague", "Europe/Copenhagen", "Europe/Tallinn",
382                 "Europe/Berlin", "Europe/Gibraltar", "Europe/Athens",
383                 "Europe/Budapest", "Europe/Rome", "Europe/Riga", "Europe/Vaduz",
384                 "Europe/Vilnius", "Europe/Luxembourg", "Europe/Malta",
385                 "Europe/Chisinau", "Europe/Tiraspol", "Europe/Monaco",
386                 "Europe/Amsterdam", "Europe/Oslo", "Europe/Warsaw",
387                 "Europe/Lisbon", "Europe/Kaliningrad", "Europe/Madrid",
388                 "Europe/Stockholm", "Europe/Zurich", "Europe/Kiev",
389                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol",
390                 "Europe/Belgrade", "Africa/Algiers", "Africa/Tripoli",
391                 "Africa/Casablanca", "Africa/Tunis", "Africa/Ceuta"
392             });
393         tempMap.put("CGST", new String[] { "America/Scoresbysund" });
394         tempMap.put("CGT", new String[] { "America/Scoresbysund" });
395         tempMap.put("CHDT", new String[] { "America/Belize" });
396         tempMap.put("CHUT", new String[] { "Asia/Chungking" });
397         tempMap.put("CJT", new String[] { "Asia/Tokyo" });
398         tempMap.put("CKHST", new String[] { "Pacific/Rarotonga" });
399         tempMap.put("CKT", new String[] { "Pacific/Rarotonga" });
400         tempMap.put("CLST",
401             new String[] { "Antarctica/Palmer", "America/Santiago" });
402         tempMap.put("CLT",
403             new String[] { "Antarctica/Palmer", "America/Santiago" });
404         tempMap.put("CMT",
405             new String[] {
406                 "Europe/Copenhagen", "Europe/Chisinau", "Europe/Tiraspol",
407                 "America/St_Lucia", "America/Buenos_Aires", "America/Rosario",
408                 "America/Cordoba", "America/Jujuy", "America/Catamarca",
409                 "America/Mendoza", "America/Caracas"
410             });
411         tempMap.put("COST", new String[] { "America/Bogota" });
412         tempMap.put("COT", new String[] { "America/Bogota" });
413         tempMap.put("CST",
414             new String[] {
415                 "Asia/Harbin", "Asia/Shanghai", "Asia/Chungking", "Asia/Urumqi",
416                 "Asia/Kashgar", "Asia/Taipei", "Asia/Macao", "Asia/Jayapura",
417                 "Australia/Darwin", "Australia/Adelaide",
418                 "Australia/Broken_Hill", "America/Chicago",
419                 "America/Indianapolis", "America/Indiana/Marengo",
420                 "America/Indiana/Knox", "America/Indiana/Vevay",
421                 "America/Louisville", "America/Detroit", "America/Menominee",
422                 "America/Rainy_River", "America/Winnipeg", "America/Regina",
423                 "America/Swift_Current", "America/Pangnirtung",
424                 "America/Iqaluit", "America/Rankin_Inlet",
425                 "America/Cambridge_Bay", "America/Cancun", "America/Mexico_City",
426                 "America/Chihuahua", "America/Hermosillo", "America/Mazatlan",
427                 "America/Belize", "America/Costa_Rica", "America/Havana",
428                 "America/El_Salvador", "America/Guatemala",
429                 "America/Tegucigalpa", "America/Managua"
430             });
431         tempMap.put("CUT", new String[] { "Europe/Zaporozhye" });
432         tempMap.put("CVST", new String[] { "Atlantic/Cape_Verde" });
433         tempMap.put("CVT", new String[] { "Atlantic/Cape_Verde" });
434         tempMap.put("CWT",
435             new String[] {
436                 "America/Chicago", "America/Indianapolis",
437                 "America/Indiana/Marengo", "America/Indiana/Knox",
438                 "America/Indiana/Vevay", "America/Louisville",
439                 "America/Menominee"
440             });
441         tempMap.put("CXT", new String[] { "Indian/Christmas" });
442         tempMap.put("DACT", new String[] { "Asia/Dacca" });
443         tempMap.put("DAVT", new String[] { "Antarctica/Davis" });
444         tempMap.put("DDUT", new String[] { "Antarctica/DumontDUrville" });
445         tempMap.put("DFT", new String[] { "Europe/Oslo", "Europe/Paris" });
446         tempMap.put("DMT", new String[] { "Europe/Belfast", "Europe/Dublin" });
447         tempMap.put("DUSST", new String[] { "Asia/Dushanbe" });
448         tempMap.put("DUST", new String[] { "Asia/Dushanbe" });
449         tempMap.put("EASST", new String[] { "Pacific/Easter" });
450         tempMap.put("EAST",
451             new String[] { "Indian/Antananarivo", "Pacific/Easter" });
452         tempMap.put("EAT",
453             new String[] {
454                 "Indian/Comoro", "Indian/Antananarivo", "Indian/Mayotte",
455                 "Africa/Djibouti", "Africa/Asmera", "Africa/Addis_Ababa",
456                 "Africa/Nairobi", "Africa/Mogadishu", "Africa/Khartoum",
457                 "Africa/Dar_es_Salaam", "Africa/Kampala"
458             });
459         tempMap.put("ECT",
460             new String[] { "Pacific/Galapagos", "America/Guayaquil" });
461         tempMap.put("EDDT", new String[] { "America/Iqaluit" });
462         tempMap.put("EDT",
463             new String[] {
464                 "America/New_York", "America/Indianapolis",
465                 "America/Indiana/Marengo", "America/Indiana/Vevay",
466                 "America/Louisville", "America/Detroit", "America/Montreal",
467                 "America/Thunder_Bay", "America/Nipigon", "America/Pangnirtung",
468                 "America/Iqaluit", "America/Cancun", "America/Nassau",
469                 "America/Santo_Domingo", "America/Port-au-Prince",
470                 "America/Jamaica", "America/Grand_Turk"
471             });
472         tempMap.put("EEMT",
473             new String[] {
474                 "Europe/Minsk", "Europe/Chisinau", "Europe/Tiraspol",
475                 "Europe/Kaliningrad", "Europe/Moscow"
476             });
477         tempMap.put("EEST",
478             new String[] {
479                 "Europe/Minsk", "Europe/Sofia", "Europe/Tallinn",
480                 "Europe/Helsinki", "Europe/Athens", "Europe/Riga",
481                 "Europe/Vilnius", "Europe/Chisinau", "Europe/Tiraspol",
482                 "Europe/Warsaw", "Europe/Bucharest", "Europe/Kaliningrad",
483                 "Europe/Moscow", "Europe/Istanbul", "Europe/Kiev",
484                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Asia/Nicosia",
485                 "Asia/Amman", "Asia/Beirut", "Asia/Gaza", "Asia/Damascus",
486                 "Africa/Cairo"
487             });
488         tempMap.put("EET",
489             new String[] {
490                 "Europe/Minsk", "Europe/Sofia", "Europe/Tallinn",
491                 "Europe/Helsinki", "Europe/Athens", "Europe/Riga",
492                 "Europe/Vilnius", "Europe/Chisinau", "Europe/Tiraspol",
493                 "Europe/Warsaw", "Europe/Bucharest", "Europe/Kaliningrad",
494                 "Europe/Moscow", "Europe/Istanbul", "Europe/Kiev",
495                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol",
496                 "Asia/Nicosia", "Asia/Amman", "Asia/Beirut", "Asia/Gaza",
497                 "Asia/Damascus", "Africa/Cairo", "Africa/Tripoli"
498             });
499         tempMap.put("EGST", new String[] { "America/Scoresbysund" });
500         tempMap.put("EGT",
501             new String[] { "Atlantic/Jan_Mayen", "America/Scoresbysund" });
502         tempMap.put("EHDT", new String[] { "America/Santo_Domingo" });
503         tempMap.put("EST",
504             new String[] {
505                 "Australia/Brisbane", "Australia/Lindeman", "Australia/Hobart",
506                 "Australia/Melbourne", "Australia/Sydney",
507                 "Australia/Broken_Hill", "Australia/Lord_Howe",
508                 "America/New_York", "America/Chicago", "America/Indianapolis",
509                 "America/Indiana/Marengo", "America/Indiana/Knox",
510                 "America/Indiana/Vevay", "America/Louisville", "America/Detroit",
511                 "America/Menominee", "America/Montreal", "America/Thunder_Bay",
512                 "America/Nipigon", "America/Pangnirtung", "America/Iqaluit",
513                 "America/Cancun", "America/Antigua", "America/Nassau",
514                 "America/Cayman", "America/Santo_Domingo",
515                 "America/Port-au-Prince", "America/Jamaica", "America/Managua",
516                 "America/Panama", "America/Grand_Turk"
517             });
518         tempMap.put("EWT",
519             new String[] {
520                 "America/New_York", "America/Indianapolis",
521                 "America/Indiana/Marengo", "America/Indiana/Vevay",
522                 "America/Louisville", "America/Detroit", "America/Jamaica"
523             });
524         tempMap.put("FFMT", new String[] { "America/Martinique" });
525         tempMap.put("FJST", new String[] { "Pacific/Fiji" });
526         tempMap.put("FJT", new String[] { "Pacific/Fiji" });
527         tempMap.put("FKST", new String[] { "Atlantic/Stanley" });
528         tempMap.put("FKT", new String[] { "Atlantic/Stanley" });
529         tempMap.put("FMT",
530             new String[] { "Atlantic/Madeira", "Africa/Freetown" });
531         tempMap.put("FNST", new String[] { "America/Noronha" });
532         tempMap.put("FNT", new String[] { "America/Noronha" });
533         tempMap.put("FRUST", new String[] { "Asia/Bishkek" });
534         tempMap.put("FRUT", new String[] { "Asia/Bishkek" });
535         tempMap.put("GALT", new String[] { "Pacific/Galapagos" });
536         tempMap.put("GAMT", new String[] { "Pacific/Gambier" });
537         tempMap.put("GBGT", new String[] { "America/Guyana" });
538         tempMap.put("GEST", new String[] { "Asia/Tbilisi" });
539         tempMap.put("GET", new String[] { "Asia/Tbilisi" });
540         tempMap.put("GFT", new String[] { "America/Cayenne" });
541         tempMap.put("GHST", new String[] { "Africa/Accra" });
542         tempMap.put("GILT", new String[] { "Pacific/Tarawa" });
543         tempMap.put("GMT",
544             new String[] {
545                 "Atlantic/St_Helena", "Atlantic/Reykjavik", "Europe/London",
546                 "Europe/Belfast", "Europe/Dublin", "Europe/Gibraltar",
547                 "Africa/Porto-Novo", "Africa/Ouagadougou", "Africa/Abidjan",
548                 "Africa/Malabo", "Africa/Banjul", "Africa/Accra",
549                 "Africa/Conakry", "Africa/Bissau", "Africa/Monrovia",
550                 "Africa/Bamako", "Africa/Timbuktu", "Africa/Nouakchott",
551                 "Africa/Niamey", "Africa/Sao_Tome", "Africa/Dakar",
552                 "Africa/Freetown", "Africa/Lome"
553             });
554         tempMap.put("GST",
555             new String[] {
556                 "Atlantic/South_Georgia", "Asia/Bahrain", "Asia/Muscat",
557                 "Asia/Qatar", "Asia/Dubai", "Pacific/Guam"
558             });
559         tempMap.put("GYT", new String[] { "America/Guyana" });
560         tempMap.put("HADT", new String[] { "America/Adak" });
561         tempMap.put("HART", new String[] { "Asia/Harbin" });
562         tempMap.put("HAST", new String[] { "America/Adak" });
563         tempMap.put("HAWT", new String[] { "America/Adak" });
564         tempMap.put("HDT", new String[] { "Pacific/Honolulu" });
565         tempMap.put("HKST", new String[] { "Asia/Hong_Kong" });
566         tempMap.put("HKT", new String[] { "Asia/Hong_Kong" });
567         tempMap.put("HMT",
568             new String[] {
569                 "Atlantic/Azores", "Europe/Helsinki", "Asia/Dacca",
570                 "Asia/Calcutta", "America/Havana"
571             });
572         tempMap.put("HOVST", new String[] { "Asia/Hovd" });
573         tempMap.put("HOVT", new String[] { "Asia/Hovd" });
574         tempMap.put("HST",
575             new String[] { "Pacific/Johnston", "Pacific/Honolulu" });
576         tempMap.put("HWT", new String[] { "Pacific/Honolulu" });
577         tempMap.put("ICT",
578             new String[] {
579                 "Asia/Phnom_Penh", "Asia/Vientiane", "Asia/Bangkok",
580                 "Asia/Saigon"
581             });
582         tempMap.put("IDDT", new String[] { "Asia/Jerusalem", "Asia/Gaza" });
583         tempMap.put("IDT", new String[] { "Asia/Jerusalem", "Asia/Gaza" });
584         tempMap.put("IHST", new String[] { "Asia/Colombo" });
585         tempMap.put("IMT",
586             new String[] { "Europe/Sofia", "Europe/Istanbul", "Asia/Irkutsk" });
587         tempMap.put("IOT", new String[] { "Indian/Chagos" });
588         tempMap.put("IRKMT", new String[] { "Asia/Irkutsk" });
589         tempMap.put("IRKST", new String[] { "Asia/Irkutsk" });
590         tempMap.put("IRKT", new String[] { "Asia/Irkutsk" });
591         tempMap.put("IRST", new String[] { "Asia/Tehran" });
592         tempMap.put("IRT", new String[] { "Asia/Tehran" });
593         tempMap.put("ISST", new String[] { "Atlantic/Reykjavik" });
594         tempMap.put("IST",
595             new String[] {
596                 "Atlantic/Reykjavik", "Europe/Belfast", "Europe/Dublin",
597                 "Asia/Dacca", "Asia/Thimbu", "Asia/Calcutta", "Asia/Jerusalem",
598                 "Asia/Katmandu", "Asia/Karachi", "Asia/Gaza", "Asia/Colombo"
599             });
600         tempMap.put("JAYT", new String[] { "Asia/Jayapura" });
601         tempMap.put("JMT",
602             new String[] { "Atlantic/St_Helena", "Asia/Jerusalem" });
603         tempMap.put("JST",
604             new String[] {
605                 "Asia/Rangoon", "Asia/Dili", "Asia/Ujung_Pandang", "Asia/Tokyo",
606                 "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Manila",
607                 "Asia/Singapore", "Pacific/Nauru"
608             });
609         tempMap.put("KART", new String[] { "Asia/Karachi" });
610         tempMap.put("KAST", new String[] { "Asia/Kashgar" });
611         tempMap.put("KDT", new String[] { "Asia/Seoul" });
612         tempMap.put("KGST", new String[] { "Asia/Bishkek" });
613         tempMap.put("KGT", new String[] { "Asia/Bishkek" });
614         tempMap.put("KMT",
615             new String[] {
616                 "Europe/Vilnius", "Europe/Kiev", "America/Cayman",
617                 "America/Jamaica", "America/St_Vincent", "America/Grand_Turk"
618             });
619         tempMap.put("KOST", new String[] { "Pacific/Kosrae" });
620         tempMap.put("KRAMT", new String[] { "Asia/Krasnoyarsk" });
621         tempMap.put("KRAST", new String[] { "Asia/Krasnoyarsk" });
622         tempMap.put("KRAT", new String[] { "Asia/Krasnoyarsk" });
623         tempMap.put("KST", new String[] { "Asia/Seoul", "Asia/Pyongyang" });
624         tempMap.put("KUYMT", new String[] { "Europe/Samara" });
625         tempMap.put("KUYST", new String[] { "Europe/Samara" });
626         tempMap.put("KUYT", new String[] { "Europe/Samara" });
627         tempMap.put("KWAT", new String[] { "Pacific/Kwajalein" });
628         tempMap.put("LHST", new String[] { "Australia/Lord_Howe" });
629         tempMap.put("LINT", new String[] { "Pacific/Kiritimati" });
630         tempMap.put("LKT", new String[] { "Asia/Colombo" });
631         tempMap.put("LPMT", new String[] { "America/La_Paz" });
632         tempMap.put("LRT", new String[] { "Africa/Monrovia" });
633         tempMap.put("LST", new String[] { "Europe/Riga" });
634         tempMap.put("M", new String[] { "Europe/Moscow" });
635         tempMap.put("MADST", new String[] { "Atlantic/Madeira" });
636         tempMap.put("MAGMT", new String[] { "Asia/Magadan" });
637         tempMap.put("MAGST", new String[] { "Asia/Magadan" });
638         tempMap.put("MAGT", new String[] { "Asia/Magadan" });
639         tempMap.put("MALT",
640             new String[] { "Asia/Kuala_Lumpur", "Asia/Singapore" });
641         tempMap.put("MART", new String[] { "Pacific/Marquesas" });
642         tempMap.put("MAWT", new String[] { "Antarctica/Mawson" });
643         tempMap.put("MDDT",
644             new String[] {
645                 "America/Cambridge_Bay", "America/Yellowknife", "America/Inuvik"
646             });
647         tempMap.put("MDST", new String[] { "Europe/Moscow" });
648         tempMap.put("MDT",
649             new String[] {
650                 "America/Denver", "America/Phoenix", "America/Boise",
651                 "America/Regina", "America/Swift_Current", "America/Edmonton",
652                 "America/Cambridge_Bay", "America/Yellowknife", "America/Inuvik",
653                 "America/Chihuahua", "America/Hermosillo", "America/Mazatlan"
654             });
655         tempMap.put("MET",
656             new String[] {
657                 "Europe/Tirane", "Europe/Andorra", "Europe/Vienna",
658                 "Europe/Minsk", "Europe/Brussels", "Europe/Sofia",
659                 "Europe/Prague", "Europe/Copenhagen", "Europe/Tallinn",
660                 "Europe/Berlin", "Europe/Gibraltar", "Europe/Athens",
661                 "Europe/Budapest", "Europe/Rome", "Europe/Riga", "Europe/Vaduz",
662                 "Europe/Vilnius", "Europe/Luxembourg", "Europe/Malta",
663                 "Europe/Chisinau", "Europe/Tiraspol", "Europe/Monaco",
664                 "Europe/Amsterdam", "Europe/Oslo", "Europe/Warsaw",
665                 "Europe/Lisbon", "Europe/Kaliningrad", "Europe/Madrid",
666                 "Europe/Stockholm", "Europe/Zurich", "Europe/Kiev",
667                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol",
668                 "Europe/Belgrade", "Africa/Algiers", "Africa/Tripoli",
669                 "Africa/Casablanca", "Africa/Tunis", "Africa/Ceuta"
670             });
671         tempMap.put("MHT",
672             new String[] { "Pacific/Majuro", "Pacific/Kwajalein" });
673         tempMap.put("MMT",
674             new String[] {
675                 "Indian/Maldives", "Europe/Minsk", "Europe/Moscow",
676                 "Asia/Rangoon", "Asia/Ujung_Pandang", "Asia/Colombo",
677                 "Pacific/Easter", "Africa/Monrovia", "America/Managua",
678                 "America/Montevideo"
679             });
680         tempMap.put("MOST", new String[] { "Asia/Macao" });
681         tempMap.put("MOT", new String[] { "Asia/Macao" });
682         tempMap.put("MPT", new String[] { "Pacific/Saipan" });
683         tempMap.put("MSK",
684             new String[] {
685                 "Europe/Minsk", "Europe/Tallinn", "Europe/Riga",
686                 "Europe/Vilnius", "Europe/Chisinau", "Europe/Kiev",
687                 "Europe/Uzhgorod", "Europe/Zaporozhye", "Europe/Simferopol"
688             });
689         tempMap.put("MST",
690             new String[] {
691                 "Europe/Moscow", "America/Denver", "America/Phoenix",
692                 "America/Boise", "America/Regina", "America/Swift_Current",
693                 "America/Edmonton", "America/Dawson_Creek",
694                 "America/Cambridge_Bay", "America/Yellowknife", "America/Inuvik",
695                 "America/Mexico_City", "America/Chihuahua", "America/Hermosillo",
696                 "America/Mazatlan", "America/Tijuana"
697             });
698         tempMap.put("MUT", new String[] { "Indian/Mauritius" });
699         tempMap.put("MVT", new String[] { "Indian/Maldives" });
700         tempMap.put("MWT",
701             new String[] { "America/Denver", "America/Phoenix", "America/Boise" });
702         tempMap.put("MYT", new String[] { "Asia/Kuala_Lumpur", "Asia/Kuching" });
703         tempMap.put("NCST", new String[] { "Pacific/Noumea" });
704         tempMap.put("NCT", new String[] { "Pacific/Noumea" });
705         tempMap.put("NDT",
706             new String[] {
707                 "America/Nome", "America/Adak", "America/St_Johns",
708                 "America/Goose_Bay"
709             });
710         tempMap.put("NEGT", new String[] { "America/Paramaribo" });
711         tempMap.put("NFT",
712             new String[] { "Europe/Paris", "Europe/Oslo", "Pacific/Norfolk" });
713         tempMap.put("NMT", new String[] { "Pacific/Norfolk" });
714         tempMap.put("NOVMT", new String[] { "Asia/Novosibirsk" });
715         tempMap.put("NOVST", new String[] { "Asia/Novosibirsk" });
716         tempMap.put("NOVT", new String[] { "Asia/Novosibirsk" });
717         tempMap.put("NPT", new String[] { "Asia/Katmandu" });
718         tempMap.put("NRT", new String[] { "Pacific/Nauru" });
719         tempMap.put("NST",
720             new String[] {
721                 "Europe/Amsterdam", "Pacific/Pago_Pago", "Pacific/Midway",
722                 "America/Nome", "America/Adak", "America/St_Johns",
723                 "America/Goose_Bay"
724             });
725         tempMap.put("NUT", new String[] { "Pacific/Niue" });
726         tempMap.put("NWT", new String[] { "America/Nome", "America/Adak" });
727         tempMap.put("NZDT", new String[] { "Antarctica/McMurdo" });
728         tempMap.put("NZHDT", new String[] { "Pacific/Auckland" });
729         tempMap.put("NZST",
730             new String[] { "Antarctica/McMurdo", "Pacific/Auckland" });
731         tempMap.put("OMSMT", new String[] { "Asia/Omsk" });
732         tempMap.put("OMSST", new String[] { "Asia/Omsk" });
733         tempMap.put("OMST", new String[] { "Asia/Omsk" });
734         tempMap.put("PDDT",
735             new String[] {
736                 "America/Inuvik", "America/Whitehorse", "America/Dawson"
737             });
738         tempMap.put("PDT",
739             new String[] {
740                 "America/Los_Angeles", "America/Juneau", "America/Boise",
741                 "America/Vancouver", "America/Dawson_Creek", "America/Inuvik",
742                 "America/Whitehorse", "America/Dawson", "America/Tijuana"
743             });
744         tempMap.put("PEST", new String[] { "America/Lima" });
745         tempMap.put("PET", new String[] { "America/Lima" });
746         tempMap.put("PETMT", new String[] { "Asia/Kamchatka" });
747         tempMap.put("PETST", new String[] { "Asia/Kamchatka" });
748         tempMap.put("PETT", new String[] { "Asia/Kamchatka" });
749         tempMap.put("PGT", new String[] { "Pacific/Port_Moresby" });
750         tempMap.put("PHOT", new String[] { "Pacific/Enderbury" });
751         tempMap.put("PHST", new String[] { "Asia/Manila" });
752         tempMap.put("PHT", new String[] { "Asia/Manila" });
753         tempMap.put("PKT", new String[] { "Asia/Karachi" });
754         tempMap.put("PMDT", new String[] { "America/Miquelon" });
755         tempMap.put("PMMT", new String[] { "Pacific/Port_Moresby" });
756         tempMap.put("PMST", new String[] { "America/Miquelon" });
757         tempMap.put("PMT",
758             new String[] {
759                 "Antarctica/DumontDUrville", "Europe/Prague", "Europe/Paris",
760                 "Europe/Monaco", "Africa/Algiers", "Africa/Tunis",
761                 "America/Panama", "America/Paramaribo"
762             });
763         tempMap.put("PNT", new String[] { "Pacific/Pitcairn" });
764         tempMap.put("PONT", new String[] { "Pacific/Ponape" });
765         tempMap.put("PPMT", new String[] { "America/Port-au-Prince" });
766         tempMap.put("PST",
767             new String[] {
768                 "Pacific/Pitcairn", "America/Los_Angeles", "America/Juneau",
769                 "America/Boise", "America/Vancouver", "America/Dawson_Creek",
770                 "America/Inuvik", "America/Whitehorse", "America/Dawson",
771                 "America/Hermosillo", "America/Mazatlan", "America/Tijuana"
772             });
773         tempMap.put("PWT",
774             new String[] {
775                 "Pacific/Palau", "America/Los_Angeles", "America/Juneau",
776                 "America/Boise", "America/Tijuana"
777             });
778         tempMap.put("PYST", new String[] { "America/Asuncion" });
779         tempMap.put("PYT", new String[] { "America/Asuncion" });
780         tempMap.put("QMT",