From 8784afca408f1a16b0e0afd0fdf803f94b971da1 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Thu, 12 Sep 2024 15:19:31 -0700 Subject: [PATCH] initial commit --- .../build/tools/cldrconverter/CLDRConverter.java | 14 ++++++++++---- .../util/cldr/CLDRTimeZoneNameProviderImpl.java | 10 +++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java b/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java index 0ca2a226a960c..f0bcc41c8583d 100644 --- a/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java +++ b/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java @@ -786,7 +786,10 @@ private static Map extractZoneNames(Map map, Str String tzKey = Optional.ofNullable((String)handlerSupplMeta.get(tzid)) .orElse(tzid); // Follow link, if needed - var tzLink = tzdbLinks.get(tzKey); + String tzLink = null; + for (var k = tzKey; tzdbLinks.containsKey(k);) { + k = tzLink = tzdbLinks.get(k); + } if (tzLink == null && tzdbLinks.containsValue(tzKey)) { // reverse link search // this is needed as in tzdb, "America/Buenos_Aires" links to @@ -1213,9 +1216,11 @@ private static void generateZoneName() throws Exception { // This method assumes handlerMetaZones is already initialized private static Set getAvailableZoneIds() { assert handlerMetaZones != null; + assert tzdbLinks != null; if (AVAILABLE_TZIDS == null) { AVAILABLE_TZIDS = new HashSet<>(ZoneId.getAvailableZoneIds()); AVAILABLE_TZIDS.addAll(handlerMetaZones.keySet()); + AVAILABLE_TZIDS.addAll(tzdbLinks.keySet()); AVAILABLE_TZIDS.remove(MetaZonesParseHandler.NO_METAZONE_KEY); } @@ -1492,10 +1497,11 @@ private static void fillTZDBShortNames(String tzid, String[] names) { * If it cannot recognize the pattern, return the argument as is. */ private static String convertGMTName(String f) { + if (f.equals("%z")) { + // Generate GMT format at runtime + return null; + } try { - // Should pre-fill GMT format once COMPAT is gone. - // Till then, fall back to GMT format at runtime, after COMPAT short - // names are populated ZoneOffset.of(f); return null; } catch (DateTimeException dte) { diff --git a/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java b/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java index 3373d3e7a963e..af24b68e00441 100644 --- a/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java +++ b/src/java.base/share/classes/sun/util/cldr/CLDRTimeZoneNameProviderImpl.java @@ -264,7 +264,13 @@ private boolean regionFormatFallback(String[] names, int index, Locale l) { } private String toGMTFormat(String id, boolean daylight, Locale l) { - var zr = ZoneInfoFile.getZoneInfo(id).toZoneId().getRules(); + LocaleResources lr = LocaleProviderAdapter.forType(Type.CLDR).getLocaleResources(l); + ResourceBundle fd = lr.getJavaTimeFormatData(); + var zi = ZoneInfoFile.getZoneInfo(id); + if (zi == null) { + return fd.getString("timezone.gmtZeroFormat"); + } + var zr = zi.toZoneId().getRules(); var now = Instant.now(); var saving = zr.getTransitions().reversed().stream() .dropWhile(zot -> zot.getInstant().isAfter(now)) @@ -276,8 +282,6 @@ private String toGMTFormat(String id, boolean daylight, Locale l) { .orElse(0); int offset = (zr.getStandardOffset(now).getTotalSeconds() + (daylight ? saving : 0)) / 60; - LocaleResources lr = LocaleProviderAdapter.forType(Type.CLDR).getLocaleResources(l); - ResourceBundle fd = lr.getJavaTimeFormatData(); if (offset == 0) { return fd.getString("timezone.gmtZeroFormat");