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