一尘不染

DST更改导致java.text.ParseException:无法解析的日期

java

以下是引发异常的代码段:

SimpleDateformat dateFormatter = new SimpleDateFormat("yyyyMMddHHmm");
Date date = dateFormatter.parse("201710010200");

上面的代码在2:00 AM之后的所有日期均抛出异常,它一直运行到01:30 AM

已配置夏令时(我正在使用Australia/Sydney时区)。

之后,我可能会看到3:00 AM的日志也没有记录在2:00 AM和3:00 AM之间的时间。

日志:

10月01日03:02:01错误:无法解析的日期:“ 201710010200”

引起原因:java.text.ParseException:无法解析的日期:java.text.DateFormat.parse(DateFormat.java:357)处的“
201710010200”

"201710010200"指定正确的日期格式后,无法解析日期字符串的问题的解决方法是什么?


阅读 166

收藏
2020-12-03

共1个答案

一尘不染

您正在尝试解析未发生的日期/时间。

现在我们知道这是在悉尼时区。2017年10月1日在悉尼,凌晨2时。如果您每分钟都在看时钟,则会看到:

  • 01:58
  • 01:59
  • 03:00
  • 03:01

因此,凌晨2点(含)至3点(不含)之间的任何日期/时间都根本没有在该时区中发生。我们不知道是什么产生了您要解析的值,但是:

  • 如果它们是时间戳,那么几乎可以肯定,在UTC中进行格式化和解析都比较好。如果产生它们的时区对于将来的分析很重要,请与UTC以及可能的时区ID保持偏移。
  • 如果它们是未链接到任何特定时区的日期/时间值,请不要像 时区中一样对其进行解析。理想情况下,使用Java 8的java.time程序包并将其解析为LocalDateTime
2020-12-03