在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
。