How to parse String to java.sql.date

java.time

I am providing the modern answer. I recommend that you use java.time, the modern Java date and time API, for your date work.

    DateTimeFormatter dateFormatter = 
        new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("dd MMMM uuuu")
            .toFormatter(Locale.ENGLISH);
    
    String s = "01 NOVEMBER 2012";
    
    LocalDate date = LocalDate.parse(s, dateFormatter);
    
    System.out.println(date);

Output:

2012-11-01

You asked for a java.sql.Date? By all likelihood you don’t need any. I assume that you wanted one for use with your SQL database. Since JDBC 4.2 you can use LocalDate there too. For example:

    PreparedStatement statement = yourDatabaseConnection.prepareStatement(
            "insert into your_table (your_date_column) values (?);");
    statement.setObject(1, date);
    statement.executeUpdate();

Note the use of PreparedStatement.setObject() (not setDate()).

If you do need a java.sql.Date for a legacy API not yet upgraded to java.time, the conversion is easy and straightforward:

    java.sql.Date oldfashionedJavaSqlDate = java.sql.Date.valueOf(date);
    System.out.println(oldfashionedJavaSqlDate);

2012-11-01

Links

  • Oracle tutorial: Date Time explaining how to use java.time.
  • Related question: Insert & fetch java.time.LocalDate objects to/from an SQL database such as H2

Use SimpleDateFormat to parse String date to java.util.Date

java.util.Date utilDate = new SimpleDateFormat("dd MMM yyyy").parse("01 NOVEMBER 2012");

and then convert it to java.sql.Date using millis

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());