有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql Java使用不同格式解析文本字段中的日期

我在Eclipse中遇到了一些日期方面的问题。我在文本字段中显示日期,格式为

dd/MM/yyyy

我需要从这个文本字段中获取文本,并将其解析为日期,将其插入到我的数据库中DATE类型的列中。我使用的是MySQL,它接受日期作为

yyyy-MM-dd

我尝试了很多选择,无论是使用LocalDate还是旧的Date,但都没有找到解决方案。有人能帮忙吗?谢谢大家!


共 (4) 个答案

  1. # 1 楼答案

    试试这个:

        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        Date date = df.parse("2016-03-05");
    
  2. # 2 楼答案

    爪哇。时间

    其他答案是正确的,但使用过时的类。旧的日期时间类,如java。util。日期/。事实证明,日历设计拙劣、混乱且麻烦。避开它们。它们已被爪哇取代。Java 8及更高版本中内置的时间框架

    定义用于解析输入字符串的模式

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
    

    将输入字符串解析为^{}对象,表示一个仅日期的值,不包含一天中的时间或时区

    LocalDate localDate = LocalDate.parse( "23/01/2016" , formatter );
    

    有朝一日,JDBC驱动程序将被更新,以直接与java一起工作。时间类型。但在此之前,我们必须转换为java。用于向数据库传输数据或从数据库传输数据的sql类型

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

    然后使用PreparedStatement,调用setDate并传递sqlDate将值写入数据库

    要从数据库中检索,请调用getDate。立即转换为java。通过调用java.sql.Date::toLocalDate来计算时间。尽量减少java的使用。sql类型。用java编写业务逻辑。时间

    如果您的JDBC驱动程序符合JDBC4.2及更高版本,则可以跳过java。sql类型并使用java。直接输入时间类型

    • ^{}
      MyPrepsmt。setObject(…,myLocalDate)
    • ^{}
      LocalDate ld=myResultSet。getObject(…,LocalDate.class)

    这个问题真是重复。搜索堆栈溢出以获取更多示例


    关于java。时间

    java.time框架内置于Java8和更高版本中。这些类取代了legacy日期时间类,如^{}^{}、&^{}

    现在位于maintenance modeJoda-Time项目建议迁移到java.time

    要了解更多信息,请参阅Oracle Tutorial。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

    在哪里可以获得java。时间课

    ThreeTen-Extra项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如^{}^{}^{}more

  3. # 3 楼答案

    先前的Java8方法

    首先,从TextField检索字符串后,应将其解析为java.util.Date

    String text = textField.getText();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    java.util.Date textFieldAsDate = null;
    
    try {
        textFieldAsDate = sdf.parse(text);
    } catch (ParseException pe) {
        // deal with ParseException
    }
    

    之后,您可以将java.util.Date转换为java.sql.Date,将其存储到MySQL数据库中,如下所示:

    sdf = new SimpleDateFormat("yyyy-MM-dd");
    java.sql.Date date = java.sql.Date.valueOf(sdf.format(textFieldAsDate));
    

    Java8方法

    正如@BasilBourque所提到的,Java日期和时间机制是由Java提供的。util。日期,爪哇。util。日历和java。util。现在是legacy的时区类

    因此,为了使用前面提到的Java 8,可以执行以下操作:

    String text = textField.getText();
    java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("dd/MM/yyyy");
    java.time.LocalDate textFieldAsDate = java.time.LocalDate.parse(text, formatter);
    

    之后,为了将LocalDate转换为java.sql.Date,将其存储到MySQL数据库中,可以执行以下操作:

    java.sql.Date sqlDate = java.sql.Date.valueOf(textFieldAsDate);
    
  4. # 4 楼答案

    您想使用SimpleDateFormat

    从文本字段中提取后,可以使用:

    String extractedDate = "dd/MM/yyyy" // Whatever date you've extracted
    Date date = new SimpleDateFormat("dd/MM/yyyy").parse(extractedDate);
    String correctDate = new SimpleDateFormat("yyyy-MM-dd").format(date);
    System.out.println(correctDate); // "yyyy-MM-dd" for whatever date was extracted