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

如何将字符串类型日期转换为日期,以便输入到oracle DB-Java中,java,string,date-format,Java,String,Date Format,传入日期格式id 2014-11-03 00.00.00.0,需要转换为2014年11月3日或2014年11月3日 什么可能是最好、最小的代码?请尝试以下代码: Date d = new SimpleDateFormat("dd/MM/yyyy").parse(date); 如果您使用的是Java8,那么有一个非常有用的日期格式类java.time.format.DateTimeFormatter 通过该类,您可以执行以下操作: LocalDate date = LocalDate.now()

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

什么可能是最好、最小的代码?

请尝试以下代码:

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

如果您使用的是Java8,那么有一个非常有用的日期格式类
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);

在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());


好的,那么您有一个值为
2014-11-03 00.00.00.0
字符串
,您想使用Java的JDBC将该值插入Oracle数据库表中的
DATE
字段中吗

首先,使用对象将
字符串
转换为
日期
对象:

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

String sd = new SimpleDateFormat("dd/MM/yyyy").format(d);
并将其插入您的声明中:

cn.createStatement().executeUpdate("INSERT INTO TABLE(...) VALUES(" + sd + ");
我建议您最好使用一个而不是普通的
SQL INSERT
语句,以便对语句进行清理:

PreparedStatement ps = cn.prepareStatement("INSERT INTO table VALUES(?, ?, ?)");
然后,将日期作为日期对象插入,无需格式化为字符串:

ps.setDate([index of the field to insert], d);
tl;博士 什么可能是最好的和最小的代码

好了。但我不建议把这么多的东西塞进一行。“最好”的代码很少是“最小”的代码

细节 其他答案是正确的。但这里有一些更短的

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

首先通过调用提取日期值。在月份和月份的第几天填充零,我们知道前10位是日期

LocalDate ld = LocalDate.parse(  "2014-11-03 00.00.00.0".substring( 0 , 10 ) );
如果您的JDBC驱动程序符合或更高版本,则可以通过直接传递
LocalDate

……或者:

myPreparedStatement.setObject( … , ld , JDBCType.DATE );
如果驱动程序不符合要求,请转换为旧类。查看添加到旧类的新方法

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

这里描述的方法假设输入字符串是用于。如果没有,您需要调整到UTC。将字符串解析为字符串时搜索堆栈溢出。

这也适用于我。一种生成日期字符串值的小实用方法,可插入到Oracle数据库日期字段中,虽然脏但有效。 第一个函数使用Calendar类,第二个函数使用LocalDate(Java8或更高版本)

一,

二,


为什么要将其转换为字符串,而不仅仅是
java.sql.Date
实例呢?如果您使用ORM,甚至是可以直接设置日期对象的准备好的语句,效果会更好。无论如何,来自第三方的字符串形式的输入日期可以使用格式为'yyyy-MM-dd hh.MM.ss.t'@Mureinik的SimpleDateFormat解析为日期实际上,我正在将日期从DB设置为JSP表单,然后再次检索它以在另一个表中进行设置,同时将日期提供为“2014-11-03 00.00.00.0”,DB限制了它
LocalDate ld = LocalDate.parse(  "2014-11-03 00.00.00.0".substring( 0 , 10 ) );
myPreparedStatement.setObject( … , ld );
myPreparedStatement.setObject( … , ld , JDBCType.DATE );
java.sql.Date sqlDate = java.sql.Date.valueOf( ld );
      /*
     * 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;
    }
       /*
     * 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;
    }