< prev index next >

src/java.base/share/classes/java/time/format/ZoneName.java

Print this page


   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             }
< prev index next >