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

时间:2012-06-21 09:53:21

标签: 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;

    }

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

Unparseable date: "30-Jun-12"

我尝试更改日期格式但仍然出现此错误。你能帮我解决一下吗?

3 个答案:

答案 0 :(得分:8)

有两个问题:

  1. 您的日期格式模式错误。 yyyy-MM-dd hh:mm:ss.S永远不会匹配30-Jun-12。您需要dd-MMM-yy。另请参阅SimpleDateFormat javadoc
  2. 解析日/月名称时,请确保指定与日/月名称中使用的语言匹配的正确语言环境。您的系统默认语言环境似乎根本不是英语。
  3. 所以这应该做:

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

    第三个问题,实际上更多的是设计问题,你不应该在模型/业务层的任何地方使用java.sql.Timestamp(和其他SQL特定日期类型)(你最初标记了JSF这个问题)。您只应在数据层中使用它。请改用java.util.Date,只在您需要将其持久保存在数据库中时才转换

    preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));
    

答案 1 :(得分:1)

您要以[{1}}格式传递日期,然后您应该使用格式

30-Jun-12

dd-MMM-yy

答案 2 :(得分:0)

如果您开发Web应用程序并在浏览器中运行它,请尝试在浏览器设置中更改首选语言设置。不同的国家/地区有不同的日期格式,欧洲国家和美国之间存在重大差异,因此请在您的浏览器中尝试(例如Firefox):

Tools => Options => Content => Choose preferable language 

确保当您将应用程序集中在浏览器中时,任务栏上的语言栏显示所需的语言。

如果Web应用程序不是案例: 检查区域设置和首选语言设置。