diff --git a/src/share/classes/java/time/ZoneId.java b/src/share/classes/java/time/ZoneId.java
index 42f390937fbf5c4ec2247ffddfcf7622eae4c521..aabc7fce93bd43123d1529278abd74d4f9fdb587 100644
--- a/src/share/classes/java/time/ZoneId.java
+++ b/src/share/classes/java/time/ZoneId.java
@@ -168,51 +168,6 @@ import java.util.TimeZone;
*/
public abstract class ZoneId implements Serializable {
- /**
- * A map of zone overrides to enable the older short time-zone names to be used.
- *
- * Use of short zone IDs has been deprecated in {@code java.util.TimeZone}.
- * This map allows the IDs to continue to be used via the
- * {@link #of(String, Map)} factory method.
- *
- * This map contains an older mapping of the IDs, where 'EST', 'MST' and 'HST'
- * map to IDs which include daylight savings.
- * This is in line with versions of TZDB before 2005r.
- *
- * This maps as follows:
- *
- * - EST - America/New_York
- * - MST - America/Denver
- * - HST - Pacific/Honolulu
- * - ACT - Australia/Darwin
- * - AET - Australia/Sydney
- * - AGT - America/Argentina/Buenos_Aires
- * - ART - Africa/Cairo
- * - AST - America/Anchorage
- * - BET - America/Sao_Paulo
- * - BST - Asia/Dhaka
- * - CAT - Africa/Harare
- * - CNT - America/St_Johns
- * - CST - America/Chicago
- * - CTT - Asia/Shanghai
- * - EAT - Africa/Addis_Ababa
- * - ECT - Europe/Paris
- * - IET - America/Indiana/Indianapolis
- * - IST - Asia/Kolkata
- * - JST - Asia/Tokyo
- * - MIT - Pacific/Apia
- * - NET - Asia/Yerevan
- * - NST - Pacific/Auckland
- * - PLT - Asia/Karachi
- * - PNT - America/Phoenix
- * - PRT - America/Puerto_Rico
- * - PST - America/Los_Angeles
- * - SST - Pacific/Guadalcanal
- * - VST - Asia/Ho_Chi_Minh
- *
- * The map is unmodifiable.
- */
- public static final Map OLD_SHORT_IDS;
/**
* A map of zone overrides to enable the short time-zone names to be used.
*
@@ -220,9 +175,9 @@ public abstract class ZoneId implements Serializable {
* This map allows the IDs to continue to be used via the
* {@link #of(String, Map)} factory method.
*
- * This map contains a newer mapping of the IDs, where 'EST', 'MST' and 'HST'
- * map to IDs which do not include daylight savings
- * This is in line with TZDB 2005r and later.
+ * This map contains a mapping of the IDs that is in line with TZDB 2005r and
+ * later, where 'EST', 'MST' and 'HST' map to IDs which do not include daylight
+ * savings.
*
* This maps as follows:
*
@@ -259,42 +214,36 @@ public abstract class ZoneId implements Serializable {
*/
public static final Map SHORT_IDS;
static {
- Map base = new HashMap<>();
- base.put("ACT", "Australia/Darwin");
- base.put("AET", "Australia/Sydney");
- base.put("AGT", "America/Argentina/Buenos_Aires");
- base.put("ART", "Africa/Cairo");
- base.put("AST", "America/Anchorage");
- base.put("BET", "America/Sao_Paulo");
- base.put("BST", "Asia/Dhaka");
- base.put("CAT", "Africa/Harare");
- base.put("CNT", "America/St_Johns");
- base.put("CST", "America/Chicago");
- base.put("CTT", "Asia/Shanghai");
- base.put("EAT", "Africa/Addis_Ababa");
- base.put("ECT", "Europe/Paris");
- base.put("IET", "America/Indiana/Indianapolis");
- base.put("IST", "Asia/Kolkata");
- base.put("JST", "Asia/Tokyo");
- base.put("MIT", "Pacific/Apia");
- base.put("NET", "Asia/Yerevan");
- base.put("NST", "Pacific/Auckland");
- base.put("PLT", "Asia/Karachi");
- base.put("PNT", "America/Phoenix");
- base.put("PRT", "America/Puerto_Rico");
- base.put("PST", "America/Los_Angeles");
- base.put("SST", "Pacific/Guadalcanal");
- base.put("VST", "Asia/Ho_Chi_Minh");
- Map pre = new HashMap<>(base);
- pre.put("EST", "America/New_York");
- pre.put("MST", "America/Denver");
- pre.put("HST", "Pacific/Honolulu");
- OLD_SHORT_IDS = Collections.unmodifiableMap(pre);
- Map post = new HashMap<>(base);
- post.put("EST", "-05:00");
- post.put("MST", "-07:00");
- post.put("HST", "-10:00");
- SHORT_IDS = Collections.unmodifiableMap(post);
+ Map map = new HashMap<>(64);
+ map.put("ACT", "Australia/Darwin");
+ map.put("AET", "Australia/Sydney");
+ map.put("AGT", "America/Argentina/Buenos_Aires");
+ map.put("ART", "Africa/Cairo");
+ map.put("AST", "America/Anchorage");
+ map.put("BET", "America/Sao_Paulo");
+ map.put("BST", "Asia/Dhaka");
+ map.put("CAT", "Africa/Harare");
+ map.put("CNT", "America/St_Johns");
+ map.put("CST", "America/Chicago");
+ map.put("CTT", "Asia/Shanghai");
+ map.put("EAT", "Africa/Addis_Ababa");
+ map.put("ECT", "Europe/Paris");
+ map.put("IET", "America/Indiana/Indianapolis");
+ map.put("IST", "Asia/Kolkata");
+ map.put("JST", "Asia/Tokyo");
+ map.put("MIT", "Pacific/Apia");
+ map.put("NET", "Asia/Yerevan");
+ map.put("NST", "Pacific/Auckland");
+ map.put("PLT", "Asia/Karachi");
+ map.put("PNT", "America/Phoenix");
+ map.put("PRT", "America/Puerto_Rico");
+ map.put("PST", "America/Los_Angeles");
+ map.put("SST", "Pacific/Guadalcanal");
+ map.put("VST", "Asia/Ho_Chi_Minh");
+ map.put("EST", "-05:00");
+ map.put("MST", "-07:00");
+ map.put("HST", "-10:00");
+ SHORT_IDS = Collections.unmodifiableMap(map);
}
/**
* Serialization version.
@@ -314,7 +263,7 @@ public abstract class ZoneId implements Serializable {
* @throws ZoneRulesException if the converted zone region ID cannot be found
*/
public static ZoneId systemDefault() {
- return ZoneId.of(TimeZone.getDefault().getID(), SHORT_IDS);
+ return TimeZone.getDefault().toZoneId();
}
/**
diff --git a/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java b/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java
index b40fe987babdab02448e9a0d8130133832d05d80..6a9d0127b0730b51c642d904fdfbc8bc8c67b037 100644
--- a/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java
+++ b/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java
@@ -62,6 +62,7 @@
package java.time.zone;
import java.io.ByteArrayInputStream;
+import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -107,7 +108,8 @@ final class TzdbZoneRulesProvider extends ZoneRulesProvider {
try {
String libDir = System.getProperty("java.home") + File.separator + "lib";
try (DataInputStream dis = new DataInputStream(
- new FileInputStream(new File(libDir, "tzdb.dat")))) {
+ new BufferedInputStream(new FileInputStream(
+ new File(libDir, "tzdb.dat"))))) {
load(dis);
}
} catch (Exception ex) {
diff --git a/src/share/classes/java/util/TimeZone.java b/src/share/classes/java/util/TimeZone.java
index aebe6859e9460a9c5bb3e07bfe4f40077c17a106..c798b656345f62fa29141e1a0c3cab44eabe088f 100644
--- a/src/share/classes/java/util/TimeZone.java
+++ b/src/share/classes/java/util/TimeZone.java
@@ -544,7 +544,16 @@ abstract public class TimeZone implements Serializable, Cloneable {
* @since 1.8
*/
public ZoneId toZoneId() {
- return ZoneId.of(getID(), ZoneId.SHORT_IDS);
+ String id = getID();
+ if (ZoneInfoFile.useOldMapping() && id.length() == 3) {
+ if ("EST".equals(id))
+ return ZoneId.of("America/New_York");
+ if ("MST".equals(id))
+ return ZoneId.of("America/Denver");
+ if ("HST".equals(id))
+ return ZoneId.of("America/Honolulu");
+ }
+ return ZoneId.of(id, ZoneId.SHORT_IDS);
}
private static TimeZone getTimeZone(String ID, boolean fallback) {
diff --git a/src/share/classes/sun/util/calendar/ZoneInfoFile.java b/src/share/classes/sun/util/calendar/ZoneInfoFile.java
index 60cd91911a27372a79e3d38c3709d01050965f06..2434bbcbd3936613cbf22893335c6523b0610a84 100644
--- a/src/share/classes/sun/util/calendar/ZoneInfoFile.java
+++ b/src/share/classes/sun/util/calendar/ZoneInfoFile.java
@@ -26,6 +26,7 @@
package sun.util.calendar;
import java.io.ByteArrayInputStream;
+import java.io.BufferedInputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
@@ -243,7 +244,8 @@ public final class ZoneInfoFile {
try {
String libDir = System.getProperty("java.home") + File.separator + "lib";
try (DataInputStream dis = new DataInputStream(
- new FileInputStream(new File(libDir, "tzdb.dat")))) {
+ new BufferedInputStream(new FileInputStream(
+ new File(libDir, "tzdb.dat"))))) {
load(dis);
}
} catch (Exception x) {
@@ -265,6 +267,10 @@ public final class ZoneInfoFile {
}
}
+ public static boolean useOldMapping() {
+ return USE_OLDMAPPING;
+ }
+
/**
* Loads the rules from a DateInputStream
*
diff --git a/test/java/time/tck/java/time/TCKZoneId.java b/test/java/time/tck/java/time/TCKZoneId.java
index c036deeb7e7cf5df8d6a673c5b76a6047a8f0703..a90c9abf48e37ad351ad8420efcc5c30255c00a9 100644
--- a/test/java/time/tck/java/time/TCKZoneId.java
+++ b/test/java/time/tck/java/time/TCKZoneId.java
@@ -93,47 +93,6 @@ import org.testng.annotations.Test;
@Test
public class TCKZoneId extends AbstractTCKTest {
- //-----------------------------------------------------------------------
- // OLD_SHORT_IDS
- //-----------------------------------------------------------------------
- public void test_constant_OLD_IDS_PRE_2005() {
- Map ids = ZoneId.OLD_SHORT_IDS;
- assertEquals(ids.get("EST"), "America/New_York");
- assertEquals(ids.get("MST"), "America/Denver");
- assertEquals(ids.get("HST"), "Pacific/Honolulu");
- assertEquals(ids.get("ACT"), "Australia/Darwin");
- assertEquals(ids.get("AET"), "Australia/Sydney");
- assertEquals(ids.get("AGT"), "America/Argentina/Buenos_Aires");
- assertEquals(ids.get("ART"), "Africa/Cairo");
- assertEquals(ids.get("AST"), "America/Anchorage");
- assertEquals(ids.get("BET"), "America/Sao_Paulo");
- assertEquals(ids.get("BST"), "Asia/Dhaka");
- assertEquals(ids.get("CAT"), "Africa/Harare");
- assertEquals(ids.get("CNT"), "America/St_Johns");
- assertEquals(ids.get("CST"), "America/Chicago");
- assertEquals(ids.get("CTT"), "Asia/Shanghai");
- assertEquals(ids.get("EAT"), "Africa/Addis_Ababa");
- assertEquals(ids.get("ECT"), "Europe/Paris");
- assertEquals(ids.get("IET"), "America/Indiana/Indianapolis");
- assertEquals(ids.get("IST"), "Asia/Kolkata");
- assertEquals(ids.get("JST"), "Asia/Tokyo");
- assertEquals(ids.get("MIT"), "Pacific/Apia");
- assertEquals(ids.get("NET"), "Asia/Yerevan");
- assertEquals(ids.get("NST"), "Pacific/Auckland");
- assertEquals(ids.get("PLT"), "Asia/Karachi");
- assertEquals(ids.get("PNT"), "America/Phoenix");
- assertEquals(ids.get("PRT"), "America/Puerto_Rico");
- assertEquals(ids.get("PST"), "America/Los_Angeles");
- assertEquals(ids.get("SST"), "Pacific/Guadalcanal");
- assertEquals(ids.get("VST"), "Asia/Ho_Chi_Minh");
- }
-
- @Test(expectedExceptions=UnsupportedOperationException.class)
- public void test_constant_OLD_IDS_PRE_2005_immutable() {
- Map ids = ZoneId.OLD_SHORT_IDS;
- ids.clear();
- }
-
//-----------------------------------------------------------------------
// SHORT_IDS
//-----------------------------------------------------------------------
diff --git a/test/java/util/Calendar/JavatimeTest.java b/test/java/util/Calendar/JavatimeTest.java
index 9f61229e1dc459f3be8ad91920a9b67915dd34df..6a0a4ff9a66a9d54f4bcf160918376206a26a7d6 100644
--- a/test/java/util/Calendar/JavatimeTest.java
+++ b/test/java/util/Calendar/JavatimeTest.java
@@ -114,14 +114,14 @@ public class JavatimeTest {
zidStr.equals("MST")) {
continue;
}
- ZoneId zid = ZoneId.of(zidStr, ZoneId.OLD_SHORT_IDS);
+ ZoneId zid = ZoneId.of(zidStr, ZoneId.SHORT_IDS);
if (!zid.equals(TimeZone.getTimeZone(zid).toZoneId())) {
throw new RuntimeException("FAILED: zid -> tz -> zid :" + zidStr);
}
TimeZone tz = TimeZone.getTimeZone(zidStr);
// no round-trip for alias and "GMT"
if (!tz.equals(TimeZone.getTimeZone(tz.toZoneId())) &&
- !ZoneId.OLD_SHORT_IDS.containsKey(zidStr) &&
+ !ZoneId.SHORT_IDS.containsKey(zidStr) &&
!zidStr.startsWith("GMT")) {
throw new RuntimeException("FAILED: tz -> zid -> tz :" + zidStr);
}