将字符串解析为mysql日期

我有一个图形用户界面,它接受一些用户输入,它也需要当前日期。 然后我需要将它们存储在数据库中。 一切都很好,但我无法理解如何将日期字段的输入字符串解析为mysql日期以将其插入数据库。

我有这样的代码。

Date date = txtToday.getText(); 

我知道应该将其解析为与Data数据类型兼容的类型。 此Date类型来自java.sql.Date 。 我怎样才能克服这个问题。

MySQL的默认DATE字段格式为:YYYY-MM-DD

而在Java中,Date类’(在java.util包中可用)的默认格式是,dow mon dd hh:mm:ss zzz yyyy

所以用这个:

  Date date = txtToday.getText(); String pattern = "yyyy-MM-dd"; SimpleDateFormat formatter = new SimpleDateFormat(pattern); String mysqlDateString = formatter.format(date); System.out.println("Java's Default Date Format: " + date); System.out.println("Mysql's Default Date Format: " + mysqlDateString); 
 try { SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Date dob = null; dob = sdf.parse(txtToday.getText()); java.sql.Date sqlDate = new java.sql.Date(dob.getTime()); c1.setDOB(sqlDate); //use this sqlDate for inserting into Database } catch (ParseException e) { System.out.println("Parse exception,incorrect input in the textbox"); e.printStackTrace(); } 

如果这行代码有效……

 Date date = txtToday.getText(); 

然后只需使用时间将其转换为sql Date …

 java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 

请参阅我对重复问题的 回答 。

使用java.time

使用现代java.time类而不是麻烦的遗留日期时间类。

无需使用java.sql.Date 。 该类由LocalDate替换。 LocalDate类表示没有时间且没有时区的仅日期值。

符合JDBC 4.2的JDBC驱动程序可以通过调用以下方法直接处理java.time类型:

  • PreparedStatement::setObject
    myPrepStmt.setObject(…,myLocalDate);
  • ResultSet::getObject
    LocalDate ld = myResultSet.getObject(…,LocalDate.class);

要向用户显示LocalDate ,请生成一个String,以便在用户界面中显示。 使用DateTimeFormatter自动本地化。 要进行本地化,请指定:

  • FormatStyle用于确定字符串的长度或缩写。
  • 用于确定(a)用于翻译日期名称,月份名称等的人类语言的Locale ,以及(b)决定缩写,大小写,标点符号,分隔符等问题的文化规范。

例:

 Locale l = Locale.CANADA_FRENCH ; DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l ); String output = zdt.format( f ); 

您也可以转向另一个方向, 解析输入字符串以获取日期。

 LocalDate ld = LocalDate.parse( input , f ) ; 

如果用户输入错误或意外,则抛出exception陷阱。

 try{ LocalDate ld = LocalDate.parse( input , f ) ; myPrepStmt.setObject( … , ld ) ; } catch ( DateTimeParseException e ) { … // Handle the error condition of faulty/unexpected input by user. } 

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。

从哪里获取java.time类?

  • Java SE 8Java SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
  • Android的
    • ThreeTenABP项目特别适用于Android的ThreeTen-Backport (如上所述)。
    • 请参见如何使用ThreeTenABP ….

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