SimpleDateFormat 在特定日期失败
SimpleDateFormat fails on particular date
在 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 从未出现在 America/New_York 时区。
spring-forward 夏令时更改发生在 2007-03-11T07:00:00Z,因此任何观看 time-zone-aware 时钟的人都会看到:
- 01:59:58
- 01:59:59
- 03:00:00
- 03:00:01
你已经告诉 SimpleDateFormat
严格处理输入,然后给它一个不存在的 date/time,所以它失败是合理的。
重要的是,无论您想如何处理这个问题,我都会强烈鼓励您摆脱遗留问题Date
/Calendar
/DateFormat
类型,并使用 java.time
代替。
在 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 从未出现在 America/New_York 时区。
spring-forward 夏令时更改发生在 2007-03-11T07:00:00Z,因此任何观看 time-zone-aware 时钟的人都会看到:
- 01:59:58
- 01:59:59
- 03:00:00
- 03:00:01
你已经告诉 SimpleDateFormat
严格处理输入,然后给它一个不存在的 date/time,所以它失败是合理的。
重要的是,无论您想如何处理这个问题,我都会强烈鼓励您摆脱遗留问题Date
/Calendar
/DateFormat
类型,并使用 java.time
代替。