将字符串解析为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.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
从哪里获取java.time类?
- Java SE 8 , Java SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和Java SE 7
- 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
- Android的
- ThreeTenABP项目特别适用于Android的ThreeTen-Backport (如上所述)。
- 请参见如何使用ThreeTenABP ….
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。