2

我正在使用 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"

我尝试更改日期格式,但仍然收到此错误。你能帮我修一下吗?

4

3 回答 3

8

有2个问题:

  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");

第三个问题,实际上更多是设计问题,您不应该java.sql.Timestamp在模型/业务层的任何地方使用(和其他 SQL 特定日期类型)(您最初标记了问题 JSF)。您应该只在数据层中使用它。改为使用java.util.Date并仅在您需要将其保留在数据库中的那一刻进行转换,就像这样

preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));
于 2012-06-21T12:32:33.380 回答
1

您以格式传递日期,30-Jun-12那么您应该使用格式

dd-MMM-yy

SimpleDateFormat

于 2012-06-21T10:09:19.023 回答
0

如果您开发 Web 应用程序并在浏览器中运行它,请尝试在浏览器设置中更改首选语言设置。不同的国家有不同的日期格式,欧洲国家和美国有很大的不同,所以在你的浏览器(例如 Firefox)中尝试:

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

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

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

于 2016-04-19T12:33:30.497 回答