使用模式将字符串解析为日期:“dd / MM / yyyy”

时间:2010-04-29 08:05:14

标签: java parsing

我想插入具有此格式MM / dd / YYYY的日期,例如:04/29/2010至29/04/2010,以便在字段类型日期中插入到mysql数据库中。 所以我有这个代码:

String dateimput=request.getParameter("datepicker");
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date dt = null;
try
{
     dt = df.parse(dateimput);           
     System.out.println("date imput is:" +dt);
} 
catch (ParseException e)
{
     e.printStackTrace();
}

但它给了我那些错误:

1-date imput是:Fri May 04 00:00:00 CEST 2012(它不是输入的正确值)。

2-dismatching with mysql date type。

我无法准确检测到错误。 请帮忙。

4 个答案:

答案 0 :(得分:4)

我真的不明白你想要实现的目标。将用户输入解析为日期?将Date作为对象或字符串存储到date(或datetiteme / timestamp)类型的MySQL DB字段中?

1。解析用户输入

您建议的代码正确地将用户输入解析为java.util.Date,前提是输入确实是预期的格式:

    String dateimput="24/12/2009"; // Christmas Eve
    java.text.DateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy");
    java.util.Date dt = null;
    try
    {
         dt = df.parse(dateimput);           
         System.out.println("date imput is:" +dt); 
        // = "date imput is:Thu Dec 24 00:00:00 CET 2009"
    } 
    catch (java.text.ParseException e)
    {
         e.printStackTrace();
    }

请注意,当Date不知道用于解析它的格式并输出它时('... + dt')调用其toString(),默认情况下使用长日期格式。但是,没有理由认为这对您来说应该是一个问题。如果您想以特定格式记录,请遵循Daniel的建议。

2。将日期存储到DB

如果您通过JDBC将日期存储到日期/日期时间/时间戳字段中,则有两个选项:

(A)使用字符串查询和Statement

将插入查询构造为String并将其传递给Statement,如下所示:

aConnection.createStatement().executeUpdate(
   "insert into mytable(mydate) values(" + df.format(dt) + ")")

在这种情况下,您必须确保日期字符串采用DB可以理解的格式(例如DB2的yyyy-mm-dd)。

(B)使用PreparedStatement

或者,哪个必须更安全,因为它会阻止SQL注入,并且因为它将java类型转换为正确的数据库形式委托给DB的JDBC驱动程序而更容易,所以使用预准备语句:

PreparedStatement pstmt = con.prepareStatement(
      "insert into mytable(mydate) values(?)");
pstmt.setDate(1, new java.sql.Date(dt.getTime()))   

答案 1 :(得分:1)

您只需要确保用于解析的格式与datepicker使用的格式相同。

更新

在数据库方面,您只需使用PreparedStatement.setDate(),您无需担心格式。

答案 2 :(得分:0)

你有:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 

DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 

答案 3 :(得分:0)

  

尝试DateFormat df = new SimpleDateFormat(“MM / dd / yyyy”);它给了我这个:日期输入是:周四4月29日00:00:00 CEST 2010   我想要29/04/2010 00:00:00

输出Date时,您还需要使用DateFormat,否则它只会打印toString()返回的内容。您可以尝试System.out.println(df.format(dt));