我使用以下代码格式化日期。但是当我以不正确的格式提供数据时,会产生意外的结果。
DateFormat inputFormat = new SimpleDateFormat("yyyy/MM/dd");
DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");`
String dateVal = "3/8/2016 12:00:00 AM";
try {
Date date = inputFormat.parse(dateVal);
String formattedVal = outputFormat.format(date);
System.out.println("formattedVal : "+formattedVal);
} catch (ParseException pe) {
throw pe;
}
在上述情况下,输出为-formattedVal:0009-02-05。
它没有解析Parse异常,而是解析值并给我错误的输出。有人可以帮我了解这种异常行为。
最佳答案
SimpleDateFormat
在内部使用Calendar
对象。 Calendar
类具有两种模式:宽松和严格。在宽大模式下,默认情况下,它接受不同字段的超出范围的值,并通过调整其他字段对这些值进行归一化,在这种情况下,将年份字段提前约五手半。
尝试将SimpleDateFormat
日历实例设置为strict:
inputFormat.setLenient(false);
实际上,您应该改用
java.time
类,或者如果不选择Java 8,则应使用JodaTime。