无法解释的日期:"30-Jun-12"

use*_*928 2 java date

我正在使用Java方法将日期转换为合适的格式:

private Timestamp toTimeStamp(String s) throws java.text.ParseException
    {
        Timestamp ts = null;
        java.util.Date date = null;
        if (s == null || s.trim().isEmpty()) return ts;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
        date = (java.util.Date) sdf.parse(s);
        ts = new Timestamp(date.getTime());

        return ts;

    }
Run Code Online (Sandbox Code Playgroud)

当我尝试执行表单时,我收到此错误:

Unparseable date: "30-Jun-12"
Run Code Online (Sandbox Code Playgroud)

我试图更改日期格式但我仍然收到此错误.你能帮我解决一下吗?

Bal*_*usC 8

有两个问题:

  1. 您的日期格式模式错误.将yyyy-MM-dd hh:mm:ss.S永远无法匹配30-Jun-12.你需要dd-MMM-yy.另见SimpleDateFormatjavadoc.
  2. 解析日/月名称时,请确保指定与日/月名称中使用的语言匹配的正确语言环境.您的系统默认语言环境似乎根本不是英语.

所以这应该做:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH);
Date date = sdf.parse("30-Jun-12");
Run Code Online (Sandbox Code Playgroud)

第三个问题,实际上更多的是设计问题,您不应该java.sql.Timestamp在模型/业务层中的任何地方使用(和其他SQL特定日期类型)(您最初标记了JSF的问题).您只应在数据层中使用它.使用java.util.Date来代替,而在准确的时刻,你需要坚持它在数据库中,像这样只转换

preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));
Run Code Online (Sandbox Code Playgroud)