Convert String to Util Date using simpleDateFormat not working

I’m having a String having date in it, I need hh:mm:ss to be added to the date, but when i use dateFormat it gives me ParseException. Here is the code:

DateFormat sdff = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String startDate = "2013-09-25";
Date frmDate;
frmDate = sdff.parse(startDate);

System.out.println("from date = " + frmDate);

I get parse exception for the abv code. But if i remove the hh:mm:ss from the Date format it works fine and the output will be from date = Wed Sep 25 00:00:00 IST 2013. But I need output like from date = 2013-09-25 00:00:00

Please help me. Thanks in advance.

Answer

You’ll need 2 SimpleDateFormat objects for that. One to parse your current date string and the other to format that parsed date to your desired format.

// This is to parse your current date string
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String startDate = "2013-09-25";
Date frmDate = sdf.parse(startDate); // Handle the ParseException here

// This is to format the your current date to the desired format
DateFormat sdff = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String frmDateStr = sdff.format(frmDate);

Edit:-

Date doesn’t have a format as such. You can only get a String representation of it using the SDF. Here an excerpt from the docs

A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.

And regarding your problem to insert it in the DB, java Date can be as such persisted in the DB date format. You don’t need to do any formatting. Only while fetching the date back from DB, you can use the to_char() method to format it.