--- old/src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java 2015-06-23 13:28:04.705597340 -0700 +++ new/src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java 2015-06-23 13:28:04.444593115 -0700 @@ -402,11 +402,12 @@ 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}": @@ -416,7 +417,7 @@ pattern = timePattern + " " + datePattern; break; default: - pattern = MessageFormat.format(dateTimePattern, timePattern, datePattern); + pattern = MessageFormat.format(dateTimePattern.replaceAll("'", "''"), timePattern, datePattern); break; } } else { @@ -492,7 +493,10 @@ 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 {