将字符串解析为mysql日期

时间:2014-08-21 05:17:51

标签: java mysql

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

我有这样的代码。

Date date = txtToday.getText();

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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();
}

答案 2 :(得分:0)

如果这行代码有效......

Date date = txtToday.getText();

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

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

答案 3 :(得分:0)

请参阅my Answerduplicate Question

使用java.time

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

无需使用java.sql.Date。该课程由LocalDate取代。 LocalDate类表示没有时间且没有时区的仅限日期的值。

符合JDBC 4.2的JDBC驱动程序可以通过调用:

直接处理java.time类型

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

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

示例:

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

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

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

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

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及更高版本中。这些类取代了麻烦的旧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