JAVA和JODA即使格式错误,日期解析也不会抛出异常

时间:2016-10-13 07:25:56

标签: java jodatime

我期待以下代码和输入抛出异常:

SimpleDateFormat getDateTimeFormat(String requiredFormat)
{
    SimpleDateFormat dateTimeFormat = new SimpleDateFormat(requiredFormat);
    //this will make sure that if parsing fails exception is thrown
    dateTimeFormat.setLenient(false);
    return dateTimeFormat;
}
Date date = getDateTimeFormat("MM/dd/yyyy HH:mm").parse(estimatedDeliveryDttm);

输入:10/25/16 17:46

我期待一个解析异常,因为年份没有给出'yyyy',但我得到的年份为'0016',我不想要。 我不能使用JAVA 8.我已经尝试过JAVA 7(包括解析位置方法)和JODA Date Time API。

1 个答案:

答案 0 :(得分:2)

来自SimpleDateFormat

的Javadocs
  

年度:如果格式化程序的日历是阳历,那么   应用以下规则。

     

对于格式化,如果是图案的数量   字母是2,年份被截断为2位数;否则就是   解释为数字。

     

用于解析,如果是模式字母的数量   超过2,年份按字面解释,无论如何   位数。所以使用模式“MM / dd / yyyy”,“01/11/12”解析   到1月11日,12 A.D。

     

使用缩写的年份模式进行解析(“y”   或者“yy”),SimpleDateFormat必须解释缩写的年份   相对于某个世纪。它通过调整日期来实现这一点   在SimpleDateFormat之前的80年和之后的20年   实例已创建。例如,使用“MM / dd / yy”和a的模式   1997年1月1日创建的SimpleDateFormat实例,字符串   “01/11/12”将被解释为2012年1月11日的字符串   “05/04/64”将被解释为1964年5月4日。仅在解析期间   由两个数字组成的字符串,由...定义   Character.isDigit(char)将被解析为默认世纪。任何   其他数字字符串,例如一位数字符串,三位或更多字符串   数字字符串,或不是所有数字的两位数字符串(for   例如,“-1”),按字面解释。所以“01/02/3”或“01/02/003”   使用相同的模式解析,如公元1月2日。同样,“01/02 / -3”被解析为公元前1月2日。

请参阅上面的粗体点,它解释了您所看到的行为。