1c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/* 21d3a3b7676bc344c9daf25285d19f86b3b6c946aPrzemyslaw Szczepaniak * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 5c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is free software; you can redistribute it and/or modify it 6c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * under the terms of the GNU General Public License version 2 only, as 7c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * published by the Free Software Foundation. Oracle designates this 8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * particular file as subject to the "Classpath" exception as provided 9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * by Oracle in the LICENSE file that accompanied this code. 10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT 12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that 15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code). 16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version 18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation, 19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any 23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions. 24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage java.time.format; 26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 276cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.impl.ZoneMeta; 286cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.text.TimeZoneNames; 296cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.util.TimeZone; 306cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.util.ULocale; 31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Locale; 32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Map; 33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/** 35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A helper class to map a zone name to metazone and back to the 36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * appropriate zone id for the particular locale. 37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * <p> 38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * The zid<->metazone mappings are based on CLDR metaZones.xml. 39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * The alias mappings are based on Link entries in tzdb data files. 40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerclass ZoneName { 42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public static String toZid(String zid, Locale locale) { 44b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer // Android-changed: delegate to ICU. 456cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer TimeZoneNames tzNames = TimeZoneNames.getInstance(locale); 466cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer if (tzNames.getAvailableMetaZoneIDs().contains(zid)) { 476cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer // Compare TimeZoneFormat#getTargetRegion. 486cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer ULocale uLocale = ULocale.forLocale(locale); 496cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer String region = uLocale.getCountry(); 506cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer if (region.length() == 0) { 516cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer uLocale = ULocale.addLikelySubtags(uLocale); 526cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer region = uLocale.getCountry(); 53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 546cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer zid = tzNames.getReferenceZoneID(zid, region); 55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return toZid(zid); 57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public static String toZid(String zid) { 606cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer // Android-changed: Use ICU ZoneMeta. 616cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer String canonicalCldrId = ZoneMeta.getCanonicalCLDRID(zid); 626cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer if (canonicalCldrId != null) { 636cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer return canonicalCldrId; 64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return zid; 66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 67b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer 68b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer // Android-removed: zidMap and aliasMap containing zone id data. 69b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer // Android-removed: zidToMzone, mzoneToZid, mzoneToZidL, aliases and their initialization code. 70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer} 71