DST更改导致java.text.ParseException:Unparseable date

Rag*_*wal -1 java dst simpledateformat datetime-parsing

以下是抛出异常的代码片段:

SimpleDateformat dateFormatter = new SimpleDateFormat("yyyyMMddHHmm");
Date date = dateFormatter.parse("201710010200");
Run Code Online (Sandbox Code Playgroud)

上面的代码在凌晨2点之后的所有日期都抛出了异常.它一直运行到凌晨01:30

DayLight节省时间已配置(我正在使用Australia/Sydney时区).

之后,我可以看到3:00 AM的日志在凌晨2:00到凌晨3:00之间的日志也没有记录.

日志:

01 Oct 03:02:01错误:无法解析日期:"201710010200"

引起:java.text.ParseException:无法解析的日期:java.text.DateFormat.parse中的"201710010200"(DateFormat.java:357)

什么可以解决日期字符串"201710010200"没有被解析的问题,并指定了正确的日期格式?

Jon*_*eet 6

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

我们现在知道这是在悉尼时区.2017年10月1日凌晨2点在悉尼,时钟前进到凌晨3点.如果你每分钟看一个时钟,你会看到:

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

所以在凌晨2点(含)和凌晨3点(不包括)之间的任何日期/时间都不会在该时区内发生.我们不知道是什么产生了您尝试解析的值,但是:

  • 如果它们是时间戳,那么格式化和解析UTC几乎肯定会更好.保留与UTC的偏移量,如果生成它们的时区对于将来的分析很重要,则可能是时区ID.
  • 如果它们是未链接到任何特定时区的日期/时间值,请不要将它们解析为它们时区中.理想情况下,使用Java 8的java.time包并将它们解析为LocalDateTime

  • @RaghavAgarwal:我不清楚你读过*我写的任何东西.你期望这个毫秒数是多少?这将表明即时.**2017年10月1日当地时间凌晨2点在悉尼没有及时的瞬间.** (2认同)