Home | History | Annotate | Download | only in format
      1 /*
      2  * Copyright (c) 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 android.icu.impl.ZoneMeta;
     28 import android.icu.text.TimeZoneNames;
     29 import android.icu.util.TimeZone;
     30 import android.icu.util.ULocale;
     31 import java.util.Locale;
     32 import java.util.Map;
     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         // Android-changed: delegate to ICU.
     45         TimeZoneNames tzNames = TimeZoneNames.getInstance(locale);
     46         if (tzNames.getAvailableMetaZoneIDs().contains(zid)) {
     47             // Compare TimeZoneFormat#getTargetRegion.
     48             ULocale uLocale = ULocale.forLocale(locale);
     49             String region = uLocale.getCountry();
     50             if (region.length() == 0) {
     51                 uLocale = ULocale.addLikelySubtags(uLocale);
     52                 region = uLocale.getCountry();
     53             }
     54             zid = tzNames.getReferenceZoneID(zid, region);
     55         }
     56         return toZid(zid);
     57     }
     58 
     59     public static String toZid(String zid) {
     60         // Android-changed: Use ICU ZoneMeta.
     61         String canonicalCldrId = ZoneMeta.getCanonicalCLDRID(zid);
     62         if (canonicalCldrId != null) {
     63             return canonicalCldrId;
     64         }
     65         return zid;
     66     }
     67 
     68     // Android-removed: zidMap and aliasMap containing zone id data.
     69     // Android-removed: zidToMzone, mzoneToZid, mzoneToZidL, aliases and their initialization code.
     70 }
     71