我使用以下代码格式化日期。但是当我以不正确的格式提供数据时,会产生意外的结果。

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。

08-24 17:56