src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java

Print this page

        

@@ -400,25 +400,26 @@
             }
         }
         if (timeStyle >= 0) {
             if (dateStyle >= 0) {
                 String dateTimePattern = null;
+                int dateTimeStyle = Math.max(dateStyle, timeStyle);
                 if (prefix != null) {
-                    dateTimePattern = getDateTimePattern(prefix, "DateTimePatterns", 0, calType);
+                    dateTimePattern = getDateTimePattern(prefix, "DateTimePatterns", dateTimeStyle, calType);
                 }
                 if (dateTimePattern == null) {
-                    dateTimePattern = getDateTimePattern(null, "DateTimePatterns", 0, calType);
+                    dateTimePattern = getDateTimePattern(null, "DateTimePatterns", dateTimeStyle, calType);
                 }
                 switch (dateTimePattern) {
                 case "{1} {0}":
                     pattern = datePattern + " " + timePattern;
                     break;
                 case "{0} {1}":
                     pattern = timePattern + " " + datePattern;
                     break;
                 default:
-                    pattern = MessageFormat.format(dateTimePattern, timePattern, datePattern);
+                    pattern = MessageFormat.format(dateTimePattern.replaceAll("'", "''"), timePattern, datePattern);
                     break;
                 }
             } else {
                 pattern = timePattern;
             }

@@ -490,11 +491,14 @@
         }
         if (value == NULLOBJECT) {
             assert prefix != null;
             return null;
         }
-        return ((String[])value)[styleIndex];
+
+        // for DateTimePatterns. CLDR has multiple styles, while JRE has one.
+        String[] styles = (String[])value;
+        return (styles.length > 1 ? styles[styleIndex] : styles[0]);
     }
 
     private static class ResourceReference extends SoftReference<Object> {
         private final String cacheKey;