8141243: Unexpected timezone returned after parsing a date
Reviewed-by: naoto, peytoia
--- a/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/make/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java Thu Dec 03 15:34:08 2015 +0900
@@ -62,6 +62,7 @@
"Asia/Tokyo",
"Europe/Bucharest",
"Asia/Shanghai",
+ "UTC",
};
// For duplicated values
@@ -136,7 +137,7 @@
for (String preferred : preferredTZIDs) {
if (map.containsKey(preferred)) {
newMap.put(preferred, map.remove(preferred));
- } else if ("GMT".equals(preferred) &&
+ } else if (("GMT".equals(preferred) || "UTC".equals(preferred)) &&
metaKeys.contains(CLDRConverter.METAZONE_ID_PREFIX+preferred)) {
newMap.put(preferred, preferred);
}
--- a/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNames.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/de/TimeZoneNames_de.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/es/TimeZoneNames_es.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/it/TimeZoneNames_it.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/pt/BR/TimeZoneNames_pt_BR.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/CN/TimeZoneNames_zh_CN.java Thu Dec 03 15:34:08 2015 +0900
@@ -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},
--- a/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java Wed Dec 02 16:37:55 2015 -0800
+++ b/jdk/src/jdk.localedata/share/classes/sun/util/resources/zh/TW/TimeZoneNames_zh_TW.java Thu Dec 03 15:34:08 2015 +0900
@@ -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 Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DateFormat/Bug8141243.java Thu Dec 03 15:34:08 2015 +0900
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015, 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<String> 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.");
+ }
+ }
+}