SimpleDateFormat将lenient设置为false的异常

时间:2013-01-29 01:16:57

标签: java datetime formatting

为什么此代码会抛出不可解析日期的异常?

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
f.setLenient(false);
String dateStr = "2012-03-11T02:46:01.000Z";
f.parse(dateStr);

当宽松为真时,它工作正常。它特别适用于输入日期' 2012-03-01T02:46:01.000Z ',即使lenient为false。 使用的默认时区:PST

1 个答案:

答案 0 :(得分:10)

因为您的默认时区中不存在该时间 - 它是夏令时更改日,并且时间从凌晨2:00跳到凌晨3:00,所以那天早上没有2:46。 :P

由于您正在解析UTC,请将SimpleDateFormat实例时区设置为UTC,如下所示:

f.setTimeZone(TimeZone.getTimeZone("UTC"));

你的问题就会消失。