简体   繁体   English

Java将日期转换为sql时间戳

[英]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. 我正在尝试转换从csv文件中提取的日期(字符串),将其转换为sql时间戳并使用预准备语句上载。 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? 以及如何将其转换为正确的sql时间戳? thank you 谢谢

Your fromFormat format specifier is 你的fromFormat格式说明符是

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 并将toFormat更改为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 . 你使用24小时格式(16:59)你应该使用HH而不是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: 所以你有一个String ,你想把它解析为Date ...让我们看看这个例子是否可以帮助你:

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' 1.用正确的日'dd'替换刺痛
2. parse to date format 2.解析日期格式
3. convert to long 3.转换为长
4. convert to sql date 4.转换为sql日期

Anyone knows a better way or idea, thread is open for comments. 任何人都知道一个更好的方式或想法,线程是开放的评论。 thank you. 谢谢。

You can convert it using java.sql.Timestamp . 您可以使用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. 首先解析fromDate然后格式化为toDate模式。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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