1. /*
  2. * @(#)DateFormatZoneData.java 1.20 01/03/18
  3. *
  4. * Copyright 1996-2001 Sun Microsystems, Inc. All Rights Reserved.
  5. *
  6. * This software is the proprietary information of Sun Microsystems, Inc.
  7. * Use is subject to license terms.
  8. *
  9. */
  10. /*
  11. * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
  12. * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
  13. *
  14. * The original version of this source code and documentation
  15. * is copyrighted and owned by Taligent, Inc., a wholly-owned
  16. * subsidiary of IBM. These materials are provided under terms
  17. * of a License Agreement between Taligent and Sun. This technology
  18. * is protected by multiple US and International patents.
  19. *
  20. * This notice and attribution to Taligent may not be removed.
  21. * Taligent is a registered trademark of Taligent, Inc.
  22. *
  23. */
  24. package java.text.resources;
  25. import java.util.ResourceBundle;
  26. import java.util.Enumeration;
  27. import java.util.Hashtable;
  28. import java.util.Vector;
  29. /**
  30. * Supplement package private date-time formatting zone data for DateFormat.
  31. * DateFormatData used in DateFormat will be initialized by loading the data
  32. * from LocaleElements and DateFormatZoneData resources. The zone data are
  33. * represented with the following form:
  34. * {ID, new String[] {ID, long zone string, short zone string, long daylight
  35. * string, short daylight string, representative city of zone}}, where ID is
  36. * NOT localized, but is used to look up the localized timezone data
  37. * internally. Localizers can localize any zone strings except
  38. * for the ID of the timezone.
  39. * Also, localizer should not touch "localPatternChars" entry.
  40. *
  41. * The <CODE>DateFormatZoneData</CODE> bundles of all locales must extend
  42. * this base class. This class implements similar to
  43. * <CODE>ListResourceBundle</CODE>, except that it preserves the order of
  44. * the keys that it obtained from <CODE>getContents</CODE> and return through
  45. * <CODE>getKeys</CODE>. As in <CODE>ListResourceBundle</CODE>,
  46. * <CODE>getKeys</CODE> appends keys from the parent bundle's
  47. * <CODE>getKeys</CODE> to this bundle's keys unless they duplicate
  48. * one of this bundle's keys.
  49. *
  50. * @see ListResourceBundle
  51. * @see Format
  52. * @see DateFormatData
  53. * @see LocaleElements
  54. * @see SimpleDateFormat
  55. * @see TimeZone
  56. * @version 1.20 03/18/01
  57. * @author Chen-Lieh Huang
  58. */
  59. // ROOT DateFormatZoneData
  60. //
  61. public class DateFormatZoneData extends ResourceBundle
  62. {
  63. private static final String LOCALPATTERNCHARS = "localPatternChars";
  64. /**
  65. * Override ResourceBundle. Same semantics.
  66. */
  67. public Object handleGetObject(String key) {
  68. if (lookup == null) {
  69. loadLookup();
  70. }
  71. if (LOCALPATTERNCHARS.equals(key)) {
  72. return lookup.get(key);
  73. }
  74. String[] contents = (String [])lookup.get(key);
  75. if (contents == null) {
  76. return null;
  77. }
  78. int clen = contents.length;
  79. String[] tmpobj = new String[clen+1];
  80. tmpobj[0] = key;
  81. for (int i = 0; i < clen; i++) {
  82. tmpobj[i+1] = contents[i];
  83. }
  84. return tmpobj;
  85. }
  86. /**
  87. * Implmentation of ResourceBundle.getKeys. Unlike the implementation in
  88. * <CODE>ListResourceBundle</CODE>, this implementation preserves
  89. * the order of keys obtained from <CODE>getContents</CODE>.
  90. */
  91. public Enumeration getKeys() {
  92. if (lookup == null) {
  93. loadLookup();
  94. }
  95. Enumeration result = null;
  96. if (parent != null) {
  97. final Enumeration myKeys = keys.elements();
  98. final Enumeration parentKeys = parent.getKeys();
  99. result = new Enumeration() {
  100. public boolean hasMoreElements() {
  101. if (temp == null) {
  102. nextElement();
  103. }
  104. return (temp != null);
  105. }
  106. public Object nextElement() {
  107. Object returnVal = temp;
  108. if (myKeys.hasMoreElements()) {
  109. temp = myKeys.nextElement();
  110. } else {
  111. temp = null;
  112. while ((temp == null) && (parentKeys.hasMoreElements())) {
  113. temp = parentKeys.nextElement();
  114. if (lookup.containsKey(temp))
  115. temp = null;
  116. }
  117. }
  118. return returnVal;
  119. }
  120. Object temp = null;
  121. };
  122. } else {
  123. result = keys.elements();
  124. }
  125. return result;
  126. }
  127. /**
  128. * Create hashtable and key vector while loading resources.
  129. */
  130. private synchronized void loadLookup() {
  131. if (lookup != null) {
  132. return;
  133. }
  134. Object[][] contents = getContents();
  135. Hashtable temp = new Hashtable(contents.length);
  136. Vector tempVec = new Vector(contents.length);
  137. for (int i = 0; i < contents.length; ++i) {
  138. temp.put(contents[i][0],contents[i][1]);
  139. tempVec.add(contents[i][0]);
  140. }
  141. keys = tempVec;
  142. lookup = temp;
  143. }
  144. Hashtable lookup = null;
  145. Vector keys = null;
  146. /**
  147. * Overrides ListResourceBundle
  148. */
  149. public Object[][] getContents() {
  150. String AGT[] = new String[] {"Argentine Time", "ART",
  151. "Argentine Summer Time", "ARST"};
  152. String AKST[] = new String[] {"Alaska Standard Time", "AKST",
  153. "Alaska Daylight Time", "AKDT"};
  154. String AMT[] = new String[] {"Amazon Standard Time", "AMT",
  155. "Amazon Summer Time", "AMST"};
  156. String ARAST[] = new String[] {"Arabia Standard Time", "AST",
  157. "Arabia Daylight Time", "ADT"};
  158. String ARMT[] = new String[] {"Armenia Time", "AMT",
  159. "Armenia Summer Time", "AMST"};
  160. String AST[] = new String[] {"Atlantic Standard Time", "AST",
  161. "Atlantic Daylight Time", "ADT"};
  162. String BDT[] = new String[] {"Bangladesh Time", "BDT",
  163. "Bangladesh Summer Time", "BDST"};
  164. String BRT[] = new String[] {"Brazil Time", "BRT",
  165. "Brazil Summer Time", "BRST"};
  166. String BTT[] = new String[] {"Bhutan Time", "BTT",
  167. "Bhutan Summer Time", "BTST"};
  168. String CAT[] = new String[] {"Central African Time", "CAT",
  169. "Central African Summer Time", "CAST"};
  170. String CET[] = new String[] {"Central European Time", "CET",
  171. "Central European Summer Time", "CEST"};
  172. String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
  173. "Chamorro Daylight Time", "ChDT"};
  174. String CLT[] = new String[] {"Chile Time", "CLT",
  175. "Chile Summer Time", "CLST"};
  176. String CST[] = new String[] {"Central Standard Time", "CST",
  177. "Central Daylight Time", "CDT"};
  178. String CTT[] = new String[] {"China Standard Time", "CST",
  179. "China Daylight Time", "CDT"};
  180. String EAT[] = new String[] {"Eastern African Time", "EAT",
  181. "Eastern African Summer Time", "EAST"};
  182. String EET[] = new String[] {"Eastern European Time", "EET",
  183. "Eastern European Summer Time", "EEST"};
  184. String EGT[] = new String[] {"Eastern Greenland Time", "EGT",
  185. "Eastern Greenland Summer Time", "EGST"};
  186. String EST[] = new String[] {"Eastern Standard Time", "EST",
  187. "Eastern Daylight Time", "EDT"};
  188. String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
  189. "Eastern Summer Time (New South Wales)", "EST"};
  190. String GMT[] = new String[] {"Greenwich Mean Time", "GMT",
  191. "Greenwich Mean Time", "GMT"};
  192. String GST[] = new String[] {"Gulf Standard Time", "GST",
  193. "Gulf Daylight Time", "GDT"};
  194. String HAST[] = new String[] {"Hawaii-Aleutian Standard Time", "HAST",
  195. "Hawaii-Aleutian Daylight Time", "HADT"};
  196. String HST[] = new String[] {"Hawaii Standard Time", "HST",
  197. "Hawaii Daylight Time", "HDT"};
  198. String ICT[] = new String[] {"Indochina Time", "ICT",
  199. "Indochina Summer Time", "ICST"};
  200. String IRT[] = new String[] {"Iran Time", "IRT",
  201. "Iran Sumer Time", "IRST"};
  202. String IST[] = new String[] {"India Standard Time", "IST",
  203. "India Daylight Time", "IDT"};
  204. String JST[] = new String[] {"Japan Standard Time", "JST",
  205. "Japan Daylight Time", "JDT"};
  206. String KST[] = new String[] {"Korea Standard Time", "KST",
  207. "Korea Daylight Time", "KDT"};
  208. String MST[] = new String[] {"Mountain Standard Time", "MST",
  209. "Mountain Daylight Time", "MDT"};
  210. String NST[] = new String[] {"Newfoundland Standard Time", "NST",
  211. "Newfoundland Daylight Time", "NDT"};
  212. String NZST[] = new String[] {"New Zealand Standard Time", "NZST",
  213. "New Zealand Daylight Time", "NZDT"};
  214. String PKT[] = new String[] {"Pakistan Time", "PKT",
  215. "Pakistan Summer Time", "PKST"};
  216. String PST[] = new String[] {"Pacific Standard Time", "PST",
  217. "Pacific Daylight Time", "PDT"};
  218. String SAST[] = new String[] {"South Africa Standard Time", "SAST",
  219. "South Africa Summer Time", "SAST"};
  220. String SBT[] = new String[] {"Solomon Is. Time", "SBT",
  221. "Solomon Is. Summer Time", "SBST"};
  222. String TMT[] = new String[] {"Turkmenistan Time", "TMT",
  223. "Turkmenistan Summer Time", "TMST"};
  224. String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
  225. "Ulaanbaatar Summer Time", "ULAST"};
  226. String WAT[] = new String[] {"Western African Time", "WAT",
  227. "Western African Summer Time", "WAST"};
  228. String WET[] = new String[] {"Western European Time", "WET",
  229. "Western European Summer Time", "WEST"};
  230. String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
  231. "Western Summer Time (Australia)", "WST"};
  232. String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
  233. "West Samoa Summer Time", "WSST"};
  234. return new Object[][] {
  235. {"PST", PST},
  236. {"America/Los_Angeles", PST},
  237. {"MST", MST},
  238. {"America/Denver", MST},
  239. {"PNT", MST},
  240. {"America/Phoenix", MST},
  241. {"CST", CST},
  242. {"America/Chicago", CST},
  243. {"EST", EST},
  244. {"America/New_York", EST},
  245. {"IET", EST},
  246. {"America/Indianapolis", EST},
  247. {"HST", HST},
  248. {"Pacific/Honolulu", HST},
  249. {"AST", AKST},
  250. {"America/Anchorage", AKST},
  251. {"America/Halifax", AST},
  252. {"CNT", NST},
  253. {"America/St_Johns", NST},
  254. {"ECT", CET},
  255. {"Europe/Paris", CET},
  256. {"GMT", GMT},
  257. {"Africa/Casablanca", WET},
  258. {"Asia/Jerusalem", new String[] {"Israel Standard Time", "IST",
  259. "Israel Daylight Time", "IDT"}},
  260. {"JST", JST},
  261. {"Asia/Tokyo", JST},
  262. {"Europe/Bucharest", EET},
  263. {"CTT", CTT},
  264. {"Asia/Shanghai", CTT},
  265. /* Don't change the order of the above zones
  266. * to keep compatibility with the previous version.
  267. */
  268. {"ACT", new String[] {"Central Standard Time (Northern Territory)", "CST",
  269. "Central Daylight Time (Northern Territory)", "CDT"}},
  270. {"AET", EST_NSW},
  271. {"AGT", AGT},
  272. {"ART", EET},
  273. {"Africa/Abidjan", GMT},
  274. {"Africa/Accra", GMT},
  275. {"Africa/Addis_Ababa", EAT},
  276. {"Africa/Algiers", CET},
  277. {"Africa/Asmera", EAT},
  278. {"Africa/Bangui", WAT},
  279. {"Africa/Banjul", GMT},
  280. {"Africa/Bissau", GMT},
  281. {"Africa/Blantyre", CAT},
  282. {"Africa/Bujumbura", CAT},
  283. {"Africa/Cairo", EET},
  284. {"Africa/Conakry", GMT},
  285. {"Africa/Dakar", GMT},
  286. {"Africa/Dar_es_Salaam", EAT},
  287. {"Africa/Djibouti", EAT},
  288. {"Africa/Douala", WAT},
  289. {"Africa/Freetown", GMT},
  290. {"Africa/Gaborone", CAT},
  291. {"Africa/Harare", CAT},
  292. {"Africa/Johannesburg", SAST},
  293. {"Africa/Kampala", EAT},
  294. {"Africa/Khartoum", EAT},
  295. {"Africa/Kigali", CAT},
  296. {"Africa/Kinshasa", WAT},
  297. {"Africa/Lagos", WAT},
  298. {"Africa/Libreville", WAT},
  299. {"Africa/Lome", GMT},
  300. {"Africa/Luanda", WAT},
  301. {"Africa/Lubumbashi", CAT},
  302. {"Africa/Lusaka", CAT},
  303. {"Africa/Malabo", WAT},
  304. {"Africa/Maputo", CAT},
  305. {"Africa/Maseru", SAST},
  306. {"Africa/Mbabane", SAST},
  307. {"Africa/Mogadishu", EAT},
  308. {"Africa/Monrovia", GMT},
  309. {"Africa/Nairobi", EAT},
  310. {"Africa/Ndjamena", WAT},
  311. {"Africa/Niamey", WAT},
  312. {"Africa/Nouakchott", GMT},
  313. {"Africa/Ouagadougou", GMT},
  314. {"Africa/Porto-Novo", WAT},
  315. {"Africa/Sao_Tome", GMT},
  316. {"Africa/Timbuktu", GMT},
  317. {"Africa/Tripoli", EET},
  318. {"Africa/Tunis", CET},
  319. {"Africa/Windhoek", WAT},
  320. {"America/Adak", HAST},
  321. {"America/Anguilla", AST},
  322. {"America/Antigua", AST},
  323. {"America/Aruba", AST},
  324. {"America/Asuncion", new String[] {"Paraguay Time", "PYT",
  325. "Paraguay Summer Time", "PYST"}},
  326. {"America/Barbados", AST},
  327. {"America/Belize", CST},
  328. {"America/Bogota", new String[] {"Colombia Time", "COT",
  329. "Colombia Summer Time", "COST"}},
  330. {"America/Buenos_Aires", AGT},
  331. {"America/Caracas", new String[] {"Venezuela Time", "VET",
  332. "Venezuela Summer Time", "VEST"}},
  333. {"America/Cayenne", new String[] {"French Guiana Time", "GFT",
  334. "French Guiana Summer Time", "GFST"}},
  335. {"America/Cayman", EST},
  336. {"America/Costa_Rica", CST},
  337. {"America/Cuiaba", AMT},
  338. {"America/Curacao", AST},
  339. {"America/Dawson_Creek", MST},
  340. {"America/Dominica", AST},
  341. {"America/Edmonton", MST},
  342. {"America/El_Salvador", CST},
  343. {"America/Fortaleza", BRT},
  344. {"America/Godthab", new String[] {"Western Greenland Time", "WGT",
  345. "Western Greenland Summer Time", "WGST"}},
  346. {"America/Grand_Turk", EST},
  347. {"America/Grenada", AST},
  348. {"America/Guadeloupe", AST},
  349. {"America/Guatemala", CST},
  350. {"America/Guayaquil", new String[] {"Ecuador Time", "ECT",
  351. "Ecuador Summer Time", "ECST"}},
  352. {"America/Guyana", new String[] {"Guyana Time", "GYT",
  353. "Guyana Summer Time", "GYST"}},
  354. {"America/Havana", CST},
  355. {"America/Jamaica", EST},
  356. {"America/La_Paz", new String[] {"Bolivia Time", "BOT",
  357. "Bolivia Summer Time", "BOST"}},
  358. {"America/Lima", new String[] {"Peru Time", "PET",
  359. "Peru Summer Time", "PEST"}},
  360. {"America/Managua", CST},
  361. {"America/Manaus", AMT},
  362. {"America/Martinique", AST},
  363. {"America/Mazatlan", MST},
  364. {"America/Mexico_City", CST},
  365. {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST",
  366. "Pierre & Miquelon Daylight Time", "PMDT"}},
  367. {"America/Montevideo", new String[] {"Uruguay Time", "UYT",
  368. "Uruguay Summer Time", "UYST"}},
  369. {"America/Montreal", EST},
  370. {"America/Montserrat", AST},
  371. {"America/Nassau", EST},
  372. {"America/Noronha", new String[] {"Fernando de Noronha Time", "FNT",
  373. "Fernando de Noronha Summer Time", "FNST"}},
  374. {"America/Panama", EST},
  375. {"America/Paramaribo", new String[] {"Suriname Time", "SRT",
  376. "Suriname Summer Time", "SRST"}},
  377. {"America/Port-au-Prince", EST},
  378. {"America/Port_of_Spain", AST},
  379. {"America/Porto_Acre", new String[] {"Acre Time", "ACT",
  380. "Acre Summer Time", "ACST"}},
  381. {"America/Puerto_Rico", AST},
  382. {"America/Regina", CST},
  383. {"America/Santiago", CLT},
  384. {"America/Santo_Domingo", AST},
  385. {"America/Sao_Paulo", BRT},
  386. {"America/Scoresbysund", EGT},
  387. {"America/St_Kitts", AST},
  388. {"America/St_Lucia", AST},
  389. {"America/St_Thomas", AST},
  390. {"America/St_Vincent", AST},
  391. {"America/Tegucigalpa", CST},
  392. {"America/Thule", AST},
  393. {"America/Tijuana", PST},
  394. {"America/Tortola", AST},
  395. {"America/Vancouver", PST},
  396. {"America/Winnipeg", CST},
  397. {"Antarctica/Casey", WST_AUS},
  398. {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT",
  399. "Dumont-d'Urville Summer Time", "DDUST"}},
  400. {"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT",
  401. "Mawson Summer Time", "MAWST"}},
  402. {"Antarctica/McMurdo", NZST},
  403. {"Antarctica/Palmer", CLT},
  404. {"Asia/Aden", ARAST},
  405. {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT",
  406. "Alma-Ata Summer Time", "ALMST"}},
  407. {"Asia/Amman", EET},
  408. {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT",
  409. "Anadyr Summer Time", "ANAST"}},
  410. {"Asia/Aqtau", new String[] {"Aqtau Time", "AQTT",
  411. "Aqtau Summer Time", "AQTST"}},
  412. {"Asia/Aqtobe", new String[] {"Aqtobe Time", "AQTT",
  413. "Aqtobe Summer Time", "AQTST"}},
  414. {"Asia/Ashgabat", TMT},
  415. {"Asia/Ashkhabad", TMT},
  416. {"Asia/Baghdad", ARAST},
  417. {"Asia/Bahrain", ARAST},
  418. {"Asia/Baku", new String[] {"Azerbaijan Time", "AZT",
  419. "Azerbaijan Summer Time", "AZST"}},
  420. {"Asia/Bangkok", ICT},
  421. {"Asia/Beirut", EET},
  422. {"Asia/Bishkek", new String[] {"Kirgizstan Time", "KGT",
  423. "Kirgizstan Summer Time", "KGST"}},
  424. {"Asia/Brunei", new String[] {"Brunei Time", "BNT",
  425. "Brunei Summer Time", "BNST"}},
  426. {"Asia/Calcutta", IST},
  427. {"Asia/Colombo", new String[] {"Sri Lanka Time", "LKT",
  428. "Sri Lanka Summer Time", "LKST"}},
  429. {"Asia/Dacca", BDT},
  430. {"Asia/Dhaka", BDT},
  431. {"Asia/Damascus", EET},
  432. {"Asia/Dubai", GST},
  433. {"Asia/Dushanbe", new String[] {"Tajikistan Time", "TJT",
  434. "Tajikistan Summer Time", "TJST"}},
  435. {"Asia/Hong_Kong", new String[] {"Hong Kong Time", "HKT",
  436. "Hong Kong Summer Time", "HKST"}},
  437. {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT",
  438. "Irkutsk Summer Time", "IRKST"}},
  439. {"Asia/Jakarta", new String[] {"Java Time", "JAVT",
  440. "Java Summer Time", "JAVST"}},
  441. {"Asia/Jayapura", new String[] {"Jayapura Time", "JAYT",
  442. "Jayapura Summer Time", "JAYST"}},
  443. {"Asia/Kabul", new String[] {"Afghanistan Time", "AFT",
  444. "Afghanistan Summer Time", "AFST"}},
  445. {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski Time", "PETT",
  446. "Petropavlovsk-Kamchatski Summer Time", "PETST"}},
  447. {"Asia/Karachi", PKT},
  448. {"Asia/Katmandu", new String[] {"Nepal Time", "NPT",
  449. "Nepal Summer Time", "NPST"}},
  450. {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
  451. "Krasnoyarsk Summer Time", "KRAST"}},
  452. {"Asia/Kuala_Lumpur", new String[] {"Malaysia Time", "MYT",
  453. "Malaysia Summer Time", "MYST"}},
  454. {"Asia/Kuwait", ARAST},
  455. {"Asia/Macao", CTT},
  456. {"Asia/Magadan", new String[] {"Magadan Time", "MAGT",
  457. "Magadan Summer Time", "MAGST"}},
  458. {"Asia/Manila", new String[] {"Philippines Time", "PHT",
  459. "Philippines Summer Time", "PHST"}},
  460. {"Asia/Muscat", GST},
  461. {"Asia/Nicosia", EET},
  462. {"Asia/Novosibirsk", new String[] {"Novosibirsk Time", "NOVT",
  463. "Novosibirsk Summer Time", "NOVST"}},
  464. {"Asia/Phnom_Penh", ICT},
  465. {"Asia/Pyongyang", KST},
  466. {"Asia/Qatar", ARAST},
  467. {"Asia/Rangoon", new String[] {"Myanmar Time", "MMT",
  468. "Myanmar Summer Time", "MMST"}},
  469. {"Asia/Riyadh", ARAST},
  470. {"Asia/Saigon", ICT},
  471. {"Asia/Seoul", KST},
  472. {"Asia/Singapore", new String[] {"Singapore Time", "SGT",
  473. "Singapore Summer Time", "SGST"}},
  474. {"Asia/Taipei", CTT},
  475. {"Asia/Tashkent", new String[] {"Uzbekistan Time", "UZT",
  476. "Uzbekistan Summer Time", "UZST"}},
  477. {"Asia/Tbilisi", new String[] {"Georgia Time", "GET",
  478. "Georgia Summer Time", "GEST"}},
  479. {"Asia/Tehran", IRT},
  480. {"Asia/Thimbu", BTT},
  481. {"Asia/Thimphu", BTT},
  482. {"Asia/Ujung_Pandang", new String[] {"Borneo Time", "BORT",
  483. "Borneo Summer Time", "BORST"}},
  484. {"Asia/Ulaanbaatar", ULAT},
  485. {"Asia/Ulan_Bator", ULAT},
  486. {"Asia/Vientiane", ICT},
  487. {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT",
  488. "Vladivostok Summer Time", "VLAST"}},
  489. {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT",
  490. "Yaktsk Summer Time", "YAKST"}},
  491. {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT",
  492. "Yekaterinburg Summer Time", "YEKST"}},
  493. {"Asia/Yerevan", ARMT},
  494. {"Atlantic/Azores", new String[] {"Azores Time", "AZOT",
  495. "Azores Summer Time", "AZOST"}},
  496. {"Atlantic/Bermuda", AST},
  497. {"Atlantic/Canary", WET},
  498. {"Atlantic/Cape_Verde", new String[] {"Cape Verde Time", "CVT",
  499. "Cape Verde Summer Time", "CVST"}},
  500. {"Atlantic/Faeroe", WET},
  501. {"Atlantic/Jan_Mayen", EGT},
  502. {"Atlantic/Reykjavik", GMT},
  503. {"Atlantic/South_Georgia", new String[] {"South Georgia Standard Time", "GST",
  504. "South Georgia Daylight Time", "GDT"}},
  505. {"Atlantic/St_Helena", GMT},
  506. {"Atlantic/Stanley", new String[] {"Falkland Is. Time", "FKT",
  507. "Falkland Is. Summer Time", "FKST"}},
  508. {"Australia/Adelaide", new String[] {"Central Standard Time (South Australia)", "CST",
  509. "Central Summer Time (South Australia)", "CST"}},
  510. {"Australia/Brisbane", new String[] {"Eastern Standard Time (Queensland)", "EST",
  511. "Eastern Summer Time (Queensland)", "EST"}},
  512. {"Australia/Broken_Hill", new String[] {"Central Standard Time (South Australia/New South Wales)", "CST",
  513. "Central Summer Time (South Australia/New South Wales)", "CST"}},
  514. {"Australia/Darwin", new String[] {"Central Standard Time (Northern Territory)", "CST",
  515. "Central Summer Time (Northern Territory)", "CST"}},
  516. {"Australia/Hobart", new String[] {"Eastern Standard Time (Tasmania)", "EST",
  517. "Eastern Summer Time (Tasmania)", "EST"}},
  518. {"Australia/Lord_Howe", new String[] {"Load Howe Standard Time", "LHST",
  519. "Load Howe Summer Time", "LHST"}},
  520. {"Australia/Perth", WST_AUS},
  521. {"Australia/Sydney", EST_NSW},
  522. {"BET", BRT},
  523. {"BST", BDT},
  524. {"CAT", CAT},
  525. {"EAT", EAT},
  526. {"EET", EET},
  527. {"Europe/Amsterdam", CET},
  528. {"Europe/Andorra", CET},
  529. {"Europe/Athens", EET},
  530. {"Europe/Belgrade", CET},
  531. {"Europe/Berlin", CET},
  532. {"Europe/Brussels", CET},
  533. {"Europe/Budapest", CET},
  534. {"Europe/Chisinau", EET},
  535. {"Europe/Copenhagen", CET},
  536. {"Europe/Dublin", new String[] {"Greenwich Mean Time", "GMT",
  537. "Irish Summer Time", "IST"}},
  538. {"Europe/Gibraltar", CET},
  539. {"Europe/Helsinki", EET},
  540. {"Europe/Istanbul", EET},
  541. {"Europe/Kaliningrad", EET},
  542. {"Europe/Kiev", EET},
  543. {"Europe/Lisbon", WET},
  544. {"Europe/London", new String[] {"Greenwich Mean Time", "GMT",
  545. "British Summer Time", "BST"}},
  546. {"Europe/Luxembourg", CET},
  547. {"Europe/Madrid", CET},
  548. {"Europe/Malta", CET},
  549. {"Europe/Minsk", EET},
  550. {"Europe/Monaco", CET},
  551. {"Europe/Moscow", new String[] {"Moscow Standard Time", "MSK",
  552. "Moscow Daylight Time", "MSD"}},
  553. {"Europe/Oslo", CET},
  554. {"Europe/Prague", CET},
  555. {"Europe/Riga", EET},
  556. {"Europe/Rome", CET},
  557. {"Europe/Samara", new String[] {"Samara Time", "SAMT",
  558. "Samara Summer Time", "SAMST"}},
  559. {"Europe/Simferopol", EET},
  560. {"Europe/Sofia", EET},
  561. {"Europe/Stockholm", CET},
  562. {"Europe/Tallinn", EET},
  563. {"Europe/Tirane", CET},
  564. {"Europe/Vaduz", CET},
  565. {"Europe/Vienna", CET},
  566. {"Europe/Vilnius", EET},
  567. {"Europe/Warsaw", CET},
  568. {"Europe/Zurich", CET},
  569. {"IST", IST},
  570. {"Indian/Antananarivo", EAT},
  571. {"Indian/Chagos", new String[] {"Indian Ocean Territory Time", "IOT",
  572. "Indian Ocean Territory Summer Time", "IOST"}},
  573. {"Indian/Christmas", new String[] {"Christmas Island Time", "CXT",
  574. "Christmas Island Summer Time", "CXST"}},
  575. {"Indian/Cocos", new String[] {"Cocos Islands Time", "CCT",
  576. "Cocos Islands Summer Time", "CCST"}},
  577. {"Indian/Comoro", EAT},
  578. {"Indian/Kerguelen", new String[] {"French Southern & Antarctic Lands Time", "TFT",
  579. "French Southern & Antarctic Lands Summer Time", "TFST"}},
  580. {"Indian/Mahe", new String[] {"Seychelles Time", "SCT",
  581. "Seychelles Summer Time", "SCST"}},
  582. {"Indian/Maldives", new String[] {"Maldives Time", "MVT",
  583. "Maldives Summer Time", "MVST"}},
  584. {"Indian/Mauritius", new String[] {"Mauritius Time", "MUT",
  585. "Mauritius Summer Time", "MUST"}},
  586. {"Indian/Mayotte", EAT},
  587. {"Indian/Reunion", new String[] {"Reunion Time", "RET",
  588. "Reunion Summer Time", "REST"}},
  589. {"MET", IRT},
  590. {"MIT", WST_SAMOA},
  591. {"NET", ARMT},
  592. {"NST", NZST},
  593. {"PLT", PKT},
  594. {"PRT", AST},
  595. {"Pacific/Apia", WST_SAMOA},
  596. {"Pacific/Auckland", NZST},
  597. {"Pacific/Chatham", new String[] {"Chatham Standard Time", "CHAST",
  598. "Chatham Daylight Time", "CHADT"}},
  599. {"Pacific/Easter", new String[] {"Easter Is. Time", "EAST",
  600. "Easter Is. Summer Time", "EASST"}},
  601. {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT",
  602. "Vanuatu Summer Time", "VUST"}},
  603. {"Pacific/Enderbury", new String[] {"Phoenix Is. Time", "PHOT",
  604. "Phoenix Is. Summer Time", "PHOST"}},
  605. {"Pacific/Fakaofo", new String[] {"Tokelau Time", "TKT",
  606. "Tokelau Summer Time", "TKST"}},
  607. {"Pacific/Fiji", new String[] {"Fiji Time", "FJT",
  608. "Fiji Summer Time", "FJST"}},
  609. {"Pacific/Funafuti", new String[] {"Tuvalu Time", "TVT",
  610. "Tuvalu Summer Time", "TVST"}},
  611. {"Pacific/Galapagos", new String[] {"Galapagos Time", "GALT",
  612. "Galapagos Summer Time", "GALST"}},
  613. {"Pacific/Gambier", new String[] {"Gambier Time", "GAMT",
  614. "Gambier Summer Time", "GAMST"}},
  615. {"Pacific/Guadalcanal", SBT},
  616. {"Pacific/Guam", ChST},
  617. {"Pacific/Kiritimati", new String[] {"Line Is. Time", "LINT",
  618. "Line Is. Summer Time", "LINST"}},
  619. {"Pacific/Kosrae", new String[] {"Kosrae Time", "KOST",
  620. "Kosrae Summer Time", "KOSST"}},
  621. {"Pacific/Majuro", new String[] {"Marshall Islands Time", "MHT",
  622. "Marshall Islands Summer Time", "MHST"}},
  623. {"Pacific/Marquesas", new String[] {"Marquesas Time", "MART",
  624. "Marquesas Summer Time", "MARST"}},
  625. {"Pacific/Nauru", new String[] {"Nauru Time", "NRT",
  626. "Nauru Summer Time", "NRST"}},
  627. {"Pacific/Niue", new String[] {"Niue Time", "NUT",
  628. "Niue Summer Time", "NUST"}},
  629. {"Pacific/Norfolk", new String[] {"Norfolk Time", "NFT",
  630. "Norfolk Summer Time", "NFST"}},
  631. {"Pacific/Noumea", new String[] {"New Caledonia Time", "NCT",
  632. "New Caledonia Summer Time", "NCST"}},
  633. {"Pacific/Pago_Pago", new String[] {"Samoa Standard Time", "SST",
  634. "Samoa Daylight Time", "SDT"}},
  635. {"Pacific/Palau", new String[] {"Palau Time", "PWT",
  636. "Palau Summer Time", "PWST"}},
  637. {"Pacific/Pitcairn", new String[] {"Pitcairn Standard Time", "PST",
  638. "Pitcairn Daylight Time", "PDT"}},
  639. {"Pacific/Ponape", new String[] {"Ponape Time", "PONT",
  640. "Ponape Summer Time", "PONST"}},
  641. {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT",
  642. "Papua New Guinea Summer Time", "PGST"}},
  643. {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT",
  644. "Cook Is. Summer Time", "CKST"}},
  645. {"Pacific/Saipan", ChST},
  646. {"Pacific/Tahiti", new String[] {"Tahiti Time", "TAHT",
  647. "Tahiti Summer Time", "TAHST"}},
  648. {"Pacific/Tarawa", new String[] {"Gilbert Is. Time", "GILT",
  649. "Gilbert Is. Summer Time", "GILST"}},
  650. {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT",
  651. "Tonga Summer Time", "TOST"}},
  652. {"Pacific/Truk", new String[] {"Truk Time", "TRUT",
  653. "Truk Summer Time", "TRUST"}},
  654. {"Pacific/Wake", new String[] {"Wake Time", "WAKT",
  655. "Wake Summer Time", "WAKST"}},
  656. {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT",
  657. "Wallis & Futuna Summer Time", "WFST"}},
  658. {"SST", SBT},
  659. {"UTC", new String[] {"Coordinated Universal Time", "UTC",
  660. "Coordinated Universal Time", "UTC"}},
  661. {"VST", ICT},
  662. {"WET", WET},
  663. {LOCALPATTERNCHARS, "GyMdkHmsSEDFwWahKz"},
  664. };
  665. }
  666. }