1 /*
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package java.time.format;
26
27 import java.util.HashMap;
28 import java.util.HashSet;
29 import java.util.Locale;
30 import java.util.Map;
31 import java.util.Map.Entry;
32 import java.util.Set;
33
34 /**
35 * A helper class to map a zone name to metazone and back to the
36 * appropriate zone id for the particular locale.
37 * <p>
38 * The zid<->metazone mappings are based on CLDR metaZones.xml.
39 * The alias mappings are based on Link entries in tzdb data files.
40 */
41 class ZoneName {
42
43 public static String toZid(String zid, Locale locale) {
44 String mzone = zidToMzone.get(zid);
45 if (mzone == null && aliases.containsKey(zid)) {
46 zid = aliases.get(zid);
47 mzone = zidToMzone.get(zid);
48 }
49 if (mzone != null) {
50 Map<String, String> map = mzoneToZidL.get(mzone);
51 if (map != null && map.containsKey(locale.getCountry())) {
52 zid = map.get(locale.getCountry());
318 "America/Bahia", "Brasilia", "America/Sao_Paulo",
319 "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
320 "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
321 "Pacific/Chatham", "Chatham", "Pacific/Chatham",
322 "Europe/Prague", "Europe_Central", "Europe/Paris",
323 "America/Blanc-Sablon", "Atlantic", "America/Halifax",
324 "America/Bogota", "Colombia", "America/Bogota",
325 "America/Managua", "America_Central", "America/Chicago",
326 "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
327 "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
328 "America/Cambridge_Bay", "America_Mountain", "America/Denver",
329 "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
330 "Africa/Khartoum", "Africa_Eastern", "Africa/Nairobi",
331 "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
332 "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
333 "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
334 "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
335 "America/Eirunepe", "Amazon", "America/Manaus",
336 "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
337 "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
338 "America/Goose_Bay", "Atlantic", "America/Halifax",
339 "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
340 "America/Swift_Current", "America_Central", "America/Chicago",
341 "America/Guyana", "Guyana", "America/Guyana",
342 "Asia/Tokyo", "Japan", "Asia/Tokyo",
343 "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
344 "America/Belem", "Brasilia", "America/Sao_Paulo",
345 "Pacific/Wallis", "Wallis", "Pacific/Wallis",
346 "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
347 "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
348 "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
349 "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
350 "America/Thunder_Bay", "America_Eastern", "America/New_York",
351 "Asia/Brunei", "Brunei", "Asia/Brunei",
352 "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
353 "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
354 "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
355 "America/Coral_Harbour", "America_Eastern", "America/New_York",
356 "America/Tortola", "Atlantic", "America/Halifax",
357 "Asia/Karachi", "Pakistan", "Asia/Karachi",
753 "Israel", "Asia/Jerusalem",
754 "US/Eastern", "America/New_York",
755 "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
756 "Turkey", "Europe/Istanbul",
757 "GMT", "Etc/GMT",
758 "US/Aleutian", "America/Adak",
759 "Brazil/DeNoronha", "America/Noronha",
760 "GB-Eire", "Europe/London",
761 "Asia/Dacca", "Asia/Dhaka",
762 "America/Ensenada", "America/Tijuana",
763 "America/Catamarca", "America/Argentina/Catamarca",
764 "Iran", "Asia/Tehran",
765 "Greenwich", "Etc/GMT",
766 "Pacific/Truk", "Pacific/Chuuk",
767 "Pacific/Samoa", "Pacific/Pago_Pago",
768 "America/Virgin", "America/St_Thomas",
769 "Asia/Katmandu", "Asia/Kathmandu",
770 "America/Indianapolis", "America/Indiana/Indianapolis",
771 "Europe/Belfast", "Europe/London",
772 "America/Kralendijk", "America/Curacao",
773 };
774
775 private static final Map<String, String> zidToMzone = new HashMap<>();
776 private static final Map<String, String> mzoneToZid = new HashMap<>();
777 private static final Map<String, Map<String, String>> mzoneToZidL = new HashMap<>();
778 private static final Map<String, String> aliases = new HashMap<>();
779
780 static {
781 for (int i = 0; i < zidMap.length; i += 3) {
782 zidToMzone.put(zidMap[i], zidMap[i + 1]);
783 mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
784 }
785
786 for (int i = 0; i < mzoneMap.length; i += 3) {
787 String mzone = mzoneMap[i];
788 Map<String, String> map = mzoneToZidL.get(mzone);
789 if (map == null) {
790 map = new HashMap<>();
791 mzoneToZidL.put(mzone, map);
792 }
|
1 /*
2 * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package java.time.format;
26
27 import java.util.HashMap;
28 import java.util.Locale;
29 import java.util.Map;
30
31 /**
32 * A helper class to map a zone name to metazone and back to the
33 * appropriate zone id for the particular locale.
34 * <p>
35 * The zid<->metazone mappings are based on CLDR metaZones.xml.
36 * The alias mappings are based on Link entries in tzdb data files.
37 */
38 class ZoneName {
39
40 public static String toZid(String zid, Locale locale) {
41 String mzone = zidToMzone.get(zid);
42 if (mzone == null && aliases.containsKey(zid)) {
43 zid = aliases.get(zid);
44 mzone = zidToMzone.get(zid);
45 }
46 if (mzone != null) {
47 Map<String, String> map = mzoneToZidL.get(mzone);
48 if (map != null && map.containsKey(locale.getCountry())) {
49 zid = map.get(locale.getCountry());
315 "America/Bahia", "Brasilia", "America/Sao_Paulo",
316 "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
317 "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
318 "Pacific/Chatham", "Chatham", "Pacific/Chatham",
319 "Europe/Prague", "Europe_Central", "Europe/Paris",
320 "America/Blanc-Sablon", "Atlantic", "America/Halifax",
321 "America/Bogota", "Colombia", "America/Bogota",
322 "America/Managua", "America_Central", "America/Chicago",
323 "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
324 "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
325 "America/Cambridge_Bay", "America_Mountain", "America/Denver",
326 "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
327 "Africa/Khartoum", "Africa_Eastern", "Africa/Nairobi",
328 "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
329 "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
330 "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
331 "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
332 "America/Eirunepe", "Amazon", "America/Manaus",
333 "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
334 "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
335 "Asia/Yangon", "Myanmar", "Asia/Rangoon",
336 "America/Goose_Bay", "Atlantic", "America/Halifax",
337 "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
338 "America/Swift_Current", "America_Central", "America/Chicago",
339 "America/Guyana", "Guyana", "America/Guyana",
340 "Asia/Tokyo", "Japan", "Asia/Tokyo",
341 "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
342 "America/Belem", "Brasilia", "America/Sao_Paulo",
343 "Pacific/Wallis", "Wallis", "Pacific/Wallis",
344 "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
345 "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
346 "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
347 "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
348 "America/Thunder_Bay", "America_Eastern", "America/New_York",
349 "Asia/Brunei", "Brunei", "Asia/Brunei",
350 "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
351 "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
352 "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
353 "America/Coral_Harbour", "America_Eastern", "America/New_York",
354 "America/Tortola", "Atlantic", "America/Halifax",
355 "Asia/Karachi", "Pakistan", "Asia/Karachi",
751 "Israel", "Asia/Jerusalem",
752 "US/Eastern", "America/New_York",
753 "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
754 "Turkey", "Europe/Istanbul",
755 "GMT", "Etc/GMT",
756 "US/Aleutian", "America/Adak",
757 "Brazil/DeNoronha", "America/Noronha",
758 "GB-Eire", "Europe/London",
759 "Asia/Dacca", "Asia/Dhaka",
760 "America/Ensenada", "America/Tijuana",
761 "America/Catamarca", "America/Argentina/Catamarca",
762 "Iran", "Asia/Tehran",
763 "Greenwich", "Etc/GMT",
764 "Pacific/Truk", "Pacific/Chuuk",
765 "Pacific/Samoa", "Pacific/Pago_Pago",
766 "America/Virgin", "America/St_Thomas",
767 "Asia/Katmandu", "Asia/Kathmandu",
768 "America/Indianapolis", "America/Indiana/Indianapolis",
769 "Europe/Belfast", "Europe/London",
770 "America/Kralendijk", "America/Curacao",
771 "Asia/Rangoon", "Asia/Yangon",
772 };
773
774 private static final Map<String, String> zidToMzone = new HashMap<>();
775 private static final Map<String, String> mzoneToZid = new HashMap<>();
776 private static final Map<String, Map<String, String>> mzoneToZidL = new HashMap<>();
777 private static final Map<String, String> aliases = new HashMap<>();
778
779 static {
780 for (int i = 0; i < zidMap.length; i += 3) {
781 zidToMzone.put(zidMap[i], zidMap[i + 1]);
782 mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
783 }
784
785 for (int i = 0; i < mzoneMap.length; i += 3) {
786 String mzone = mzoneMap[i];
787 Map<String, String> map = mzoneToZidL.get(mzone);
788 if (map == null) {
789 map = new HashMap<>();
790 mzoneToZidL.put(mzone, map);
791 }
|