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

时间:2016-02-07 19:11:25

标签: java parsing timezone timestamp datetime-format

我正在尝试解析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版本,以便我们可以查看是否/何时被破坏了?

谢谢!

2 个答案:

答案 0 :(得分:4)

找到答案。

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

“根据美国政府印刷局的风格,夏威夷 - 阿留申标准和日光时间的缩写已经从HAST / HADT改为HST / HDT。自1983年以来,这只影响了America / Adak,因为America / Honolulu已经在使用新风格。“

所以我会继续使用HST代替。

感谢大家的投入!

答案 1 :(得分:-1)

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

    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);