使用解析方法时,String源是未知的!

时间:2010-04-29 15:10:14

标签: java parsing

将字符串解析为sql有效的日期:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");            
    java.util.Date date = null;
    try {
        date =  df.parse(dateimput);
    } catch (ParseException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }

使用dateimput是我从我的表单得到的: String dateimput=request.getParameter("datepicker");
但在运行时看到错误:

java.text.ParseException: Format.parseObject(String) failed
at java.text.Format.parseObject(Unknown Source)
at ServletEdition.doPost(ServletEdition.java:70)  

所以这意味着dateimput不知道+我注意到它在以下情况下被正确显示:

 System.out.println("datepicker:" +dateimput);

感谢。

3 个答案:

答案 0 :(得分:1)

所以这似乎是第一次变得复杂,但仔细查看解决方案。 事实上,我们需要2个简单日期格式,因为在我的情况下解析将分两步完成:

System.out.println("datepicker:" +dateimput);



    SimpleDateFormat df1 = new SimpleDateFormat("MM/dd/yyyy"); 
    SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd");
    Date dt=null;
    try {
        dt = df1.parse(dateimput);
        System.out.println("dt" +dt);
        System.out.println("dt formatted" +df2.format(dt));

    } catch (ParseException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

现在工作正常,没问题

答案 1 :(得分:0)

“未知错误”错误只是意味着您的类路径不包含JDK源,因此它不知道Format的代码中发生异常的位置(它确实知道告诉您ServletEdition中的哪一行有问题但是)。

答案 2 :(得分:0)

发生此错误是因为parse方法的输入字符串与模式应该看起来不一样:

  

public Date parse(String source)抛出ParseException   [...]   抛出:   ParseException - 如果无法解析指定字符串的开头。

请参阅parse文档。

看来,dateimput中提供的输入无效。因为这可能总是发生在用户输入(我假设,该值实际上是用户输入...),最好使用,例如,another version of parse,它允许您确定输入字符串中的位置解析器必须要ping,并且在这种情况下不需要你捕获异常,但是使用结果和ParsePosition参数告诉你失败。

ParsePosition posn = new ParsePosition();
Date parsed = format.parse(input, posn);

if( parsed == null ) {

    int badPosn = posn.getErrorIndex();
    System.out.println("The input is invalid; the parser stopped at " + badPosn);

} else {

    // Do something with the date...
}