如何将字符串类型日期转换为日期以便进入oracle DB - Java

时间:2016-10-04 16:17:50

标签: java string date-format

传入日期格式ID 2014-11-03 00.00.00.0,需要转换为2014年3月11日或2014年11月3日。

什么是最好的和最小的代码?

6 个答案:

答案 0 :(得分:2)

好的,你有一个String,其值为2014-11-03 00.00.00.0,你想在Oracle数据库表的DATE字段中插入该值,使用Java的JDBC吗?

首先,使用SimpleDateFormat对象将String转换为Date对象:

String s = "2014-11-03 00.00.00.0";
Date d = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss.S").parse(s);

然后,如果您使用的是普通语句,请按照SQL INSERT命令中的Oracle接受方式重新格式化,再次使用SimpleDateFormat对象:

String sd = new SimpleDateFormat("dd/MM/yyyy").format(d);

并将其插入您的Satatement:

cn.createStatement().executeUpdate("INSERTRT INTO TABLE(...) VALUES(" + sd + ");

我建议您更好地使用PreparedStatement代替普通SQL INSERT语句,以便对您的陈述进行清理:

PreparedStatement ps = cn.prepareStatement("INSERT INTO table VALUES(?, ?, ?)");

然后,将日期作为Date对象插入,而无需格式化为字符串:

ps.setDate([index of the field to insert], d);

答案 1 :(得分:1)

如果你使用的是java 8,那么有一个非常有用的日期格式类java.time.format.DateTimeFormatter 通过该课程,您可以执行以下操作:

LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH.mm.ss");
String text = date.format(formatter);
LocalDate parsedDate = LocalDate.parse(text, formatter);

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/DD/YYYY");
String newText = parsedDate.format(formatter2);

答案 2 :(得分:0)

试试这段代码:

Date d = new SimpleDateFormat("dd/MM/yyyy").parse(date);

答案 3 :(得分:0)

在java 8中,从该字符串获取java.sql.Date(= java.util.Date零时间)可能会使用格式化程序,但因为字符串几乎是ISO标准:

    LocalDateTime x = LocalDateTime.parse("2014-11-03T00:00:00.0");

可以将字符串修补为:

    LocalDateTime t = LocalDateTime.parse("2014-11-03 00.00.00.0"
            .replaceFirst(" ", "T") // Make ISO
            .replaceFirst("\\.", ":")
            .replaceFirst("\\.", ":"));

    java.sql.Date time = java.sql.Date.valueOf(t.toLocalDate());

或者

    LocalDate t = LocalDate.parse("2014-11-03 00.00.00.0"
            .replaceFirst(" .*$", "")); // Remove time part
    java.sql.Date time = java.sql.Date.valueOf(t);

答案 4 :(得分:0)

TL;博士

myPreparedStatement.setObject( 
    … , 
    LocalDate.parse(  "2014-11-03 00.00.00.0".substring( 0 , 10 ) ) 
); 
  

什么是最好的和最小的代码?

你去吧。但是我建议实际上将这么多内容整理成一行。 “最佳”代码很少是“最小”代码。

详细

其他答案都是正确的。但这里的东西更短。

首先,您不应该将仅日期值作为字符串提交给数据库。提交为仅限日期的对象。您的JDBC driver将处理与数据库进行通信的详细信息。

首先通过调用String::substring提取日期值。使用月份和日期的填充零,我们知道前10位是日期。

LocalDate ld = LocalDate.parse(  "2014-11-03 00.00.00.0".substring( 0 , 10 ) );

如果您的JDBC驱动程序符合JDBC 4.2或更高版本,则可以直接通过PreparedStatement::setObject传递LocalDate

myPreparedStatement.setObject( … , ld );

...或者也许:

myPreparedStatement.setObject( … , ld , JDBCType.DATE );

如果您的驱动程序不符合规定,请转换为旧版java.sql.Date。查看添加到旧类的新方法。

java.sql.Date sqlDate = java.sql.Date.valueOf( ld );

此处描述的方法假设输入字符串用于UTC。如果没有,您需要调整为UTC。搜索Stack Overflow以查找将字符串解析为ZonedDateTime的帖子。

答案 5 :(得分:0)

这也对我有用。一种小的实用程序方法,用于生成可以插入到Oracle Database Date字段中的日期的字符串值,有点脏但是可以使用。 第一个函数使用Calender类,第二个函数使用LocalDate(Java8或更高版本)

1。

      /*
     * Format Date for Presentation in format
     * 19-DEC-2019   i.e. Oracle DB DD-MMM-YYYYY
     */
    private String stringToDate(String inputDate) {
        String finalDate = null;
        if (inputDate == null)
            return null;

        try {
            Date parseDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);

            // set your local time zone
            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Africa/Lusaka"));
            cal.setTime(parseDate);
            String finalMonth = "";
            int yearVal = cal.get(Calendar.YEAR);
            int monthVal = cal.get(Calendar.MONTH);  //returns value 0 to 11
            int dayVal = cal.get(Calendar.DAY_OF_MONTH);

            switch(monthVal) {
            case 0:
                finalMonth = "JAN";
                break;
            case 1:
                finalMonth = "FEB";
                break;
            case 2:
                finalMonth = "MAR";
                break;
            case 3:
                finalMonth = "APR";
                break;
            case 4:
                finalMonth = "MAY";
                break;
            case 5:
                finalMonth = "JUN";
                break;
            case 6:
                finalMonth = "JUL";
                break;
            case 7:
                finalMonth = "AUG";
                break;
            case 8:
                finalMonth = "SEP";
                break;
            case 9:
                finalMonth = "OCT";
                break;
            case 10:
                finalMonth = "NOV";
                break;
            case 11:
                finalMonth = "DEC";
                break;

            }

            finalDate = dayVal+"-"+finalMonth+"-"+yearVal;

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return finalDate;
    }

2。

       /*
     * Format Date for Presentation in format
     *  19-DEC-2019   i.e. Oracle DB DD-MMM-YYYYY
     */
    private String stringToDateJava8(String inputDate) {
        String finalDate = null;
        if (inputDate == null)
            return null;

        try {
            Date parseDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);

            String finalMonth = "";
            LocalDate localDate = parseDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            int yearVal  = localDate.getYear();
            int monthVal = localDate.getMonthValue();   //returns value 1 to 12
            int dayVal   = localDate.getDayOfMonth();

            switch(monthVal) {
            case 1:
                finalMonth = "JAN";
                break;
            case 2:
                finalMonth = "FEB";
                break;
            case 3:
                finalMonth = "MAR";
                break;
            case 4:
                finalMonth = "APR";
                break;
            case 5:
                finalMonth = "MAY";
                break;
            case 6:
                finalMonth = "JUN";
                break;
            case 7:
                finalMonth = "JUL";
                break;
            case 8:
                finalMonth = "AUG";
                break;
            case 9:
                finalMonth = "SEP";
                break;
            case 10:
                finalMonth = "OCT";
                break;
            case 11:
                finalMonth = "NOV";
                break;
            case 12:
                finalMonth = "DEC";
                break;

            }

            finalDate = dayVal+"-"+finalMonth+"-"+yearVal;

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return finalDate;
    }