简体   繁体   中英

Java convert date to sql timestamp

I'm trying to convert a date (string) extracted from a csv file, convert it to sql timestamp and upload using prepared statement. What I have is:

String test = "8/10/2014 16:59";

DateFormat fromFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm");
fromFormat.setLenient(false);
DateFormat toFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS");
toFormat.setLenient(false);
Date date2 = null;
try {
    date2 = toFormat.parse(test);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

//java.sql.Timestamp ts2 = java.sql.Timestamp.valueOf(date2);
//java.sql.Timestamp sqlDate2 = new java.sql.Timestamp(timestamp); 
//sql_statement.setTimestamp(1, ts2);

As you can see my code is messy as I'm trying to solve this problem. I'm always getting an error in eclipse:

java.text.ParseException: Unparseable date: "8/10/2014 16:59"
at java.text.DateFormat.parse(DateFormat.java:357)
at      com.syntronic.client.thread.ORCThreadTejasInv.uploadOracleDBOptical(ORCThreadTejasInv.java:555)
at com.syntronic.client.thread.ORCThreadTejasInv.connectOracleDB(ORCThreadTejasInv.java:170)
at com.syntronic.client.thread.ORCThreadTejasInv.retrieveOracleTejas(ORCThreadTejasInv.java:125)
at com.syntronic.client.thread.ORCThreadTejasInv.run(ORCThreadTejasInv.java:84)
at java.lang.Thread.run(Thread.java:745)

I even try using:

SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
String yourformattedDate = sdf.format(test);

and diff error shows up"

Exception in thread "Thread-6" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:301)
at java.text.Format.format(Format.java:157)
at com.syntronic.client.thread.ORCThreadTejasInv.uploadOracleDBOptical(ORCThreadTejasInv.java:562)
at com.syntronic.client.thread.ORCThreadTejasInv.connectOracleDB(ORCThreadTejasInv.java:170)
at com.syntronic.client.thread.ORCThreadTejasInv.retrieveOracleTejas(ORCThreadTejasInv.java:125)
at com.syntronic.client.thread.ORCThreadTejasInv.run(ORCThreadTejasInv.java:84)
at java.lang.Thread.run(Thread.java:745)

Anyone can help on why the date is unparseable? and how to convert it to a proper sql timestamp? thank you

Your fromFormat format specifier is

dd/MM/yyyy hh:mm

but should be

dd/MM/yyyy HH:mm

And change the toFormat to yyyy-MM-dd HH:mm:ss.SSSSSS

Then your parse code should change from

date2 = toFormat.parse(test);

to

date2 = fromFormat.parse(test);
System.out.println(toFormat.format(date2));

And I get the output

2014-10-08 04:59:00.000000

When you parse a date-string that looks like this:

String test = "8/10/2014 16:59";

you're using 24-hours format (16:59) you should use HH instead of hh .

See the following code snippet:

    DateFormat fromFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
    fromFormat.setLenient(false);
    Date date2 = null;
    try {
        date2 = fromFormat.parse(test);
        System.out.println("date2 = " + date2);  // prints date2 = Wed Oct 08 16:59:00 PDT 2014          
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Please use following code it will serve your need

        String test = "8/10/2014 16:59";
        Date date2 = null;
        SimpleDateFormat fromFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm");


        try
        {

            date2 = fromFormat.parse(test);
            Timestamp tt = new Timestamp(date2.getTime());
            System.out.println(tt);

        } catch (ParseException ex)
        {

            date2 = null;
        } 

So you have a String , and you want to parse it as a Date ... Let's see if this example helps you:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class DateConverter
{
    public static void main(String[] args) {
        String test = "8/10/2014 16:59";
        SimpleDateFormat sdf1 = new SimpleDateFormat("d/MM/yyyy HH:mm"),
                         sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        /*
         'sdf1' will be used to parse your input string as a date
         'sdf2' will be used to output a string with your desired date format
         */
        Date d;
        String formatted_date;
        try {
            // Parse the string to a date, using the defined format
            d = sdf1.parse(test);
            // Now, format the date with 'sdf2' and store it in a string
            formatted_date = sdf2.format(d);
            System.out.println(formatted_date); // The output is: 2014-10-08 16:59:00
        } catch(ParseException e) {
            System.err.println(e.getMessage());
            e.printStackTrace(System.err);
        }
    }
}

Was able to fix it using the code below:

DateFormat fromFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
Date date2 = null;
String def = perRow[cnt].replaceAll("8", "08");
try {
    date2 = fromFormat.parse(def);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

long tsTime1 = date2.getTime();

java.sql.Timestamp sqlDate2 = new java.sql.Timestamp(tsTime1); 
sql_statement.setTimestamp(2, sqlDate2);

Of course, I don't know if this is the correct or proer way to it as:
1. replace the sting with correct day 'dd'
2. parse to date format
3. convert to long
4. convert to sql date

Anyone knows a better way or idea, thread is open for comments. thank you.

You can convert it using java.sql.Timestamp . Here is a snippet:

    String strDate = "15/07/1989 15:30";
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm");
    Date date = format.parse(strDate);
    System.out.println(date);
    java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
    System.out.println(timestamp);

And the output will be:

Sat Jul 15 15:30:00 IST 1989
1989-07-15 15:30:00.0

Simple!

First parse fromDate then format in toDate pattern.

toFormat.format(fromFormat.parse(test));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM