--- old/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java 2016-01-14 12:55:15.132092900 +0530 +++ new/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java 2016-01-14 12:55:14.367692900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,11 +30,37 @@ import java.io.PrintWriter; import java.util.Formatter; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.SortedSet; class ResourceBundleGenerator implements BundleGenerator { + // preferred timezones - keeping compatibility with JDK1.1 3 letter abbreviations + private static final String[] preferredTZIDs = { + "America/Los_Angeles", + "America/Denver", + "America/Phoenix", + "America/Chicago", + "America/New_York", + "America/Indianapolis", + "Pacific/Honolulu", + "America/Anchorage", + "America/Halifax", + "America/Sitka", + "America/St_Johns", + "Europe/Paris", + // Although CLDR does not support abbreviated zones, handle "GMT" as a + // special case here, as it is specified in the javadoc. + "GMT", + "Africa/Casablanca", + "Asia/Jerusalem", + "Asia/Tokyo", + "Europe/Bucharest", + "Asia/Shanghai", + "UTC", + }; + @Override public void generateBundle(String packageName, String baseName, String localeID, boolean useJava, Map map, BundleType type) throws IOException { @@ -89,6 +115,19 @@ for (String key : metaKeys) { map.remove(key); } + + // Make it preferred ordered + LinkedHashMap newMap = new LinkedHashMap<>(); + for (String preferred : preferredTZIDs) { + if (map.containsKey(preferred)) { + newMap.put(preferred, map.remove(preferred)); + } else if (("GMT".equals(preferred) || "UTC".equals(preferred)) && + metaKeys.contains(CLDRConverter.METAZONE_ID_PREFIX+preferred)) { + newMap.put(preferred, preferred); + } + } + newMap.putAll(map); + map = newMap; } try (PrintWriter out = new PrintWriter(file, encoding)) { --- old/src/share/classes/sun/util/resources/TimeZoneNames.java 2016-01-14 12:55:19.203692900 +0530 +++ new/src/share/classes/sun/util/resources/TimeZoneNames.java 2016-01-14 12:55:18.470492900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -307,6 +307,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java 2016-01-14 12:55:23.107692900 +0530 +++ new/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java 2016-01-14 12:55:22.312092900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java 2016-01-14 12:55:27.038892900 +0530 +++ new/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java 2016-01-14 12:55:26.352492900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java 2016-01-14 12:55:30.704892900 +0530 +++ new/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java 2016-01-14 12:55:30.002892900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java 2016-01-14 12:55:34.402092900 +0530 +++ new/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java 2016-01-14 12:55:33.684492900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java 2016-01-14 12:55:38.328892900 +0530 +++ new/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java 2016-01-14 12:55:37.425692900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java 2016-01-14 12:55:42.135292900 +0530 +++ new/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java 2016-01-14 12:55:41.448892900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java 2016-01-14 12:55:45.879292900 +0530 +++ new/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java 2016-01-14 12:55:45.177292900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java 2016-01-14 12:55:49.638892900 +0530 +++ new/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java 2016-01-14 12:55:48.921292900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java 2016-01-14 12:55:53.258092900 +0530 +++ new/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java 2016-01-14 12:55:52.540492900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1034,7 +1035,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- old/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java 2016-01-14 12:56:00.324892900 +0530 +++ new/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java 2016-01-14 12:55:59.638492900 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -308,6 +308,7 @@ {"Europe/Bucharest", EET}, {"Asia/Shanghai", CTT}, {"CTT", CTT}, + {"UTC", UTC}, /* Don't change the order of the above zones * to keep compatibility with the previous version. */ @@ -1036,7 +1037,6 @@ {"US/Pacific", PST}, {"US/Pacific-New", PST}, {"US/Samoa", SAMOA}, - {"UTC", UTC}, {"VST", ICT}, {"W-SU", MSK}, {"WET", WET}, --- /dev/null 2016-01-14 12:56:04.000000000 +0530 +++ new/test/java/text/Format/DateFormat/Bug8141243.java 2016-01-14 12:56:03.086092900 +0530 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8141243 + * @summary Make sure that SimpleDateFormat parses "UTC" as the UTC time zone. + * @run main Bug8141243 + * @run main/othervm -Djava.locale.providers=COMPAT Bug8141243 + */ + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.TimeZone; +import static java.util.TimeZone.*; + +public class Bug8141243 { + public static void main(String[] args) { + TimeZone UTC = TimeZone.getTimeZone("UTC"); + TimeZone initTz = TimeZone.getDefault(); + + List errors = new ArrayList<>(); + try { + TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); + for (Locale locale : DateFormat.getAvailableLocales()) { + // exclude any locales which localize "UTC". + String utc = UTC.getDisplayName(false, SHORT, locale); + if (!"UTC".equals(utc)) { + System.out.println("Skipping " + locale + " due to localized UTC name: " + utc); + continue; + } + SimpleDateFormat fmt = new SimpleDateFormat("z", locale); + try { + Date date = fmt.parse("UTC"); + // Parsed one may not exactly be UTC. Universal, UCT, etc. are equivalents. + if (!fmt.getTimeZone().getID().matches("(Etc/)?(UTC|Universal|UCT|Zulu)")) { + errors.add("timezone: " + fmt.getTimeZone().getID() + + ", locale: " + locale); + } + } catch (ParseException e) { + errors.add("parse exception: " + e + ", locale: " + locale); + } + } + } finally { + // Restore the default time zone + TimeZone.setDefault(initTz); + } + + if (!errors.isEmpty()) { + System.out.println("Got unexpected results:"); + for (String s : errors) { + System.out.println(" " + s); + } + throw new RuntimeException("Test failed."); + } else { + System.out.println("Test passed."); + } + } +}