Java 1.8 拒绝解析 US/Aleutian (HAST) 时区的日期?

Java 1.8 refuses to parse dates with US/Aleutian (HAST) time zone?

我正在尝试解析 US/Aleutian 时间戳。这在过去有效,但我无法找出为什么它不再有效。我是 运行 Java 1.8 更新 72.

代码如下:

    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
        sdf.setTimeZone(TimeZone.getTimeZone("US/Aleutian"));

        // the following line throws an parsing exception
        Date d = sdf.parse("1969-12-31T13:00:00HAST");
        System.out.println(sdf.format(d));

    } catch (Exception e) {
        e.printStackTrace();
    }

... Date d = sdf.parse("1969-12-31T13:00:00HAST"); 行抛出异常,但我无法找出它有什么问题:

java.text.ParseException: Unparseable date: "1969-12-31T13:00:00HAST"
    at java.text.DateFormat.parse(Unknown Source)

我确信这在过去有效。我研究了 HAST 时区,它是有效的。我不确定为什么这对我不起作用。

谁能知道这是怎么回事?如果这对您有用,能否请您列出您的 java 版本,以便我们找出 if/when 这是否已损坏?

谢谢!

SimpleDateFormat 是一个旧的 class,有一些问题。尝试使用 class java.time.format.DateTimeFormatter class in Java 8. 尝试这样的事情:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz");
    Instant instant = formatter.parse("1969-12-31T13:00:00HAST", Instant::from);
    Date date = Date.from(instant);

找到答案。

根据 this,该缩写已在 Java 6 更新 101 中删除:

"The abbreviations for Hawaii-Aleutian standard and daylight times have been changed from HAST/HADT to HST/HDT, as per US Government Printing Office style. This affects only America/Adak since 1983, as America/Honolulu was already using the new style."

所以我将继续使用 HST。

感谢大家的投稿!