SimpleDateFormat在特定日期失败



在java 1.8上,此代码无法通过

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
dateFormat.setLenient(false);
dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
dateFormat.parse("03/11/2007 02:05:01");

有趣的是,03:05:01正确解析

是的,那是因为2007-03-11T02:05:01从未发生在美国/纽约时区。

春季前夏令时的变化发生在2007-03-11T07:00:00Z,所以任何观看时区时钟的人都会看到:

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

您已经告诉SimpleDateFormat严格处理输入,然后给它一个不存在的日期/时间,所以它失败是合理的。

重要的是,无论您希望如何处理,我都强烈建议您放弃传统的Date/Calendar/DateFormat类型,转而使用java.time

最新更新