Java从TextField解析日期的格式不同

时间:2016-03-05 13:23:54

标签: java mysql date parsing format

我在Eclipse中遇到日期问题。我在TextField中显示格式为

的日期

dd/MM/yyyy

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

yyyy-MM-dd

我尝试了许多选项,包括LocalDate或旧Date,但没有找到解决方案。有人可以帮忙吗?谢谢!

4 个答案:

答案 0 :(得分:1)

您想使用SimpleDateFormat

从TextField中提取后,您可以使用:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

先前的Java 8方法

首先,在从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));

Java 8方法

如@BasilBourque所述,Java日期和时间机制由java.util.Date,java.util.Calendar和java.util.TimeZone类提供,现在是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);

答案 3 :(得分:0)

java.time

其他答案是正确的,但使用过时的类。旧的日期时间类(如java.util.Date/.Calendar)已被证明设计不当,令人困惑且麻烦。避免他们。它们已被Java 8及更高版本中内置的java.time框架所取代。

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

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

将输入字符串解析为LocalDate对象,表示没有时间或时区的仅日期值。

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

有一天,JDBC驱动程序将更新为直接使用java.time类型。但在此之前,我们必须转换为java.sql类型,以便将数据传输到数据库或从数据库传输数据。

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

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

要从数据库中检索,请致电getDate。通过调用java.sql.Date::toLocalDate立即转换为java.time。最大限度地减少对java.sql类型的使用。在java.time中执行业务逻辑。

如果JDBC驱动程序符合JDBC 4.2及更高版本,则可以跳过java.sql类型并直接使用java.time类型。

这个问题实际上是重复的。搜索Stack Overflow以获取更多示例。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore