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

Java使用不同格式解析文本字段中的日期,java,mysql,date,parsing,format,Java,Mysql,Date,Parsing,Format,我在Eclipse中遇到了一些日期方面的问题。我在文本字段中显示日期,格式为 dd/MM/yyyy 我需要从这个文本字段中获取文本并将其解析为日期,然后将其插入数据库中的date类型的列中。我使用的是MySQL,它接受日期作为 yyyy-MM-dd 我尝试了很多选择,包括LocalDate或更早的Date,但没有找到解决方案。有人能帮忙吗?谢谢大家! 您想使用simpleDataFormat类 从文本字段中提取后,可以使用: String extractedDate = "dd/MM/yyyy"

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

dd/MM/yyyy

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

yyyy-MM-dd


我尝试了很多选择,包括
LocalDate
或更早的
Date
,但没有找到解决方案。有人能帮忙吗?谢谢大家!

您想使用
simpleDataFormat

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

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
试试这个:

    SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    Date date = df.parse("2016-03-05");
先前的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.date、Java.util.Calendar和Java.util.TimeZone类提供的,这些类现在都是

因此,为了使用前面提到的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);
java.sql.Date sqlDate = java.sql.Date.valueOf(textFieldAsDate);
之后,为了将
LocalDate
转换为
java.sql.Date
,将其存储到MySQL数据库中,可以执行以下操作:

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);
java.sql.Date sqlDate = java.sql.Date.valueOf(textFieldAsDate);
java.time 其他答案是正确的,但使用过时的类。旧的日期时间类,如java.util.date/.Calendar,被证明设计得很差,容易混淆,而且很麻烦。避开它们。它们已经被内置在Java8和更高版本中的java.time框架所取代

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

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
将输入字符串解析为一个对象,表示一个只包含日期的值,不包含一天中的时间或时区

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类型


  • myprepsmt.setObject(…,myLocalDate)

  • LocalDate ld=myResultSet.getObject(…,LocalDate.class)
这个问题真是重复。搜索堆栈溢出以获取更多示例


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。

数据库中的列是什么类型的?SimpleDataFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期->文本)、解析(文本->日期)和规范化!这就解决了我的问题:)仅供参考,像、
java.text.SimpleTextFormat
这样麻烦的旧日期时间类现在被这些类取代了。见。@BasilBourque谢谢你的警告。我已经相应地更新了我的答案。仅供参考,像、
java.text.SimpleTextFormat
这样麻烦的旧日期时间类现在被这些类取代了。看见