public class DateCheck {
public static void main(String[] args) {
DateFormat oDateFormat = new SimpleDateFormat("yyyyMMdd"); try {
System.out.println(oDateFormat.parse("2011011j"));
} catch (ParseException e) {
// TODO Auto-generated catch block
System.out.print(e);
} }
}

解决方案 »

  1.   

    catch用的作用就是处理捕获到的异常。 
      

  2.   

    1. 在jdk1.6.03和jdk1.6.14中,会将这个日期直接解析成 “2013-03-01” ;2. 而在jdk1.6.20中,这行代码,是无法成功执行的,会抛出“非法的参数异常”
    由于手头上只有jdk1.6中的这个三个小版本, 所以只测试了这三个。有人改用正则表达式,其实不用那么麻烦的。搞定结贴。希望对大家有帮助。
      

  3.   

    你这个执行了上面的打印语句,没有抛出异常。结果是:
    Sat Jan 01 00:00:00 CST 2011
    如果你想抛出异常,可以将上面的字符串置为空
      

  4.   

    我想楼主只是为了让我们见识一下新鲜事物。。估计这是jdk的bug吧,在jdk1.6.20给修复了。。
      

  5.   

    在1.6.0的API看到的解释如下根据给定的解析位置开始解析日期/时间字符串。例如,时间文本 "07/10/96 4:5 PM, PDT" 会解析成等同于 Date(837039928046) 的 Date。 
    在默认情况下,进行的解析是不严格的:如果输入的形式不是此对象的格式化方法使用的形式,但仍可作为日期进行解析,则解析将获得成功。客户端可能通过调用 setLenient(false) 来强调严格遵守该格式。 这样看不抛异常时对的
      

  6.   

    这个要看SimpleDateFormat内部的处理
      

  7.   

    虽然已经结贴。但是由于我错误的结论可能误导了很多朋友。这里边做一下解释:
    首先,这个与JDK版本并没有关系。否定我前边的结论。
    其次,原因在“new SimpleDateFormat("yyyyMMdd");”段代码里边;如果将yyyyMMdd改成yyyyMMDD的话。就会产生异常并捕获。否则将没有异常抛出。
    并不会像上边几位朋友说的,不合法的日期就一定会抛异常。