diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/text/DateTimePatternGenerator.java b/icu4j/main/core/src/main/java/com/ibm/icu/text/DateTimePatternGenerator.java index e2c5ea92e9ed..90713bc49397 100644 --- a/icu4j/main/core/src/main/java/com/ibm/icu/text/DateTimePatternGenerator.java +++ b/icu4j/main/core/src/main/java/com/ibm/icu/text/DateTimePatternGenerator.java @@ -156,10 +156,10 @@ private void initData(ULocale uLocale, boolean skipStdPatterns) { PatternInfo returnInfo = new PatternInfo(); addCanonicalItems(); - if (!skipStdPatterns) { // skip to prevent circular dependency when used by Calendar + addCLDRData(returnInfo, uLocale); + if (!skipStdPatterns && cldrAvailableFormatKeys.isEmpty()) { // skip to prevent circular dependency when used by Calendar addICUPatterns(returnInfo, uLocale); } - addCLDRData(returnInfo, uLocale); if (!skipStdPatterns) { // also skip to prevent circular dependency from Calendar setDateTimeFromCalendar(uLocale); } else { diff --git a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java index 6aa82e550b41..d3cd64d069d1 100644 --- a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java +++ b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java @@ -1350,7 +1350,7 @@ public void TestOptions() { new TestOptionsItem( "da", "Hmm", "HH.mm", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "da", "HHmm", "HH.mm", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "da", "hhmm", "h.mm\u202Fa", DateTimePatternGenerator.MATCH_NO_OPTIONS ), - new TestOptionsItem( "da", "Hmm", "H.mm", DateTimePatternGenerator.MATCH_HOUR_FIELD_LENGTH ), + new TestOptionsItem( "da", "Hmm", "HH.mm", DateTimePatternGenerator.MATCH_HOUR_FIELD_LENGTH ), new TestOptionsItem( "da", "HHmm", "HH.mm", DateTimePatternGenerator.MATCH_HOUR_FIELD_LENGTH ), new TestOptionsItem( "da", "hhmm", "hh.mm\u202Fa", DateTimePatternGenerator.MATCH_HOUR_FIELD_LENGTH ), // @@ -1889,7 +1889,7 @@ public void testDateTimePatterns() { "d MMM y, HH:mm", "dd/MM/y HH:mm" } ), new DTPLocaleAndResults( "ha", new String[]{ - "EEEE d MMMM, y 'da' HH:mm", + "y MMMM d, EEEE 'da' HH:mm", "d MMMM, y 'da' HH:mm", "d MMM, y, HH:mm", "y-MM-dd, HH:mm" } ), @@ -2077,4 +2077,15 @@ public void testAlphabeticSubstitution23114() { String bestPattern = dtpg.getBestPattern("GyMEd"); assertEquals("Should not substitute numeric for alpha", "EEE, MMM d, y G", bestPattern); } + + @Test + public void testTimePatternSelection18881() { + DateTimePatternGenerator dtpg0 = DateTimePatternGenerator.getInstance(ULocale.forLanguageTag("th")); + String bestPattern = dtpg0.getBestPattern("MMMMdjmsO"); + assertEquals("getInstance", "d MMMM เวลา HH:mm:ss O", bestPattern); + + DateTimePatternGenerator dtpg1 = DateTimePatternGenerator.getInstanceNoStdPat(ULocale.forLanguageTag("th")); + bestPattern = dtpg1.getBestPattern("MMMMdjmsO"); + assertEquals("getInstanceNoStdPat", "d MMMM HH:mm:ss O", bestPattern); + } }