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",