【问题标题】:How to Convert String type date to date for entry into oracle DB - Java如何将字符串类型日期转换为日期以进入 oracle DB - Java
【发布时间】:2016-10-04 16:17:50
【问题描述】:

传入日期格式 id 2014-11-03 00.00.00.0,需要转换为 03/11/2014 或 03-Nov-2014。

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

【问题讨论】:

  • 为什么要将其转换为字符串而不仅仅是java.sql.Date 实例?
  • 如果你使用 ORM 会更好,甚至可以直接设置日期对象的准备好的语句。无论如何,作为字符串来自第三方的输入日期可以使用 SimpleDateFormat 解析为日期,格式为 'yyyy-MM-dd hh.mm.ss.t'
  • @Mureinik 实际上,我将数据库中的日期设置为 JSP 表单,然后再次检索它以将其设置在另一个表中,同时将日期提供为“2014-11-03 00.00.00.0 ", DB 限制它

标签: java string date-format


【解决方案1】:

好的,那么您有一个值为2014-11-03 00.00.00.0String,并且您想使用Java 的JDBC 将该值插入到Oracle 数据库表内的DATE 字段中?

首先,使用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);

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

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

并将其插入到您的声明中:

cn.createStatement().executeUpdate("INSERT 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);

【讨论】:

    【解决方案2】:

    如果您使用的是 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);
    

    【讨论】:

      【解决方案3】:

      试试这个代码:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          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 的帖子。

          【讨论】:

            【解决方案6】:

            这也适用于我。一个小的实用程序方法,用于生成可以插入 Oracle 数据库日期字段中的日期字符串值,有点脏但有效。 第一个函数使用 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;
                }
            

            【讨论】:

              猜你喜欢
              • 2017-06-16
              • 1970-01-01
              • 2011-06-13
              • 2012-04-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-09
              相关资源
              最近更新 更多