我有一个图形用户界面,它接受一些用户输入,它也需要当前日期。然后我需要将它们存储在数据库中。一切都很好但我无法理解如何将日期字段的输入字符串解析为mysql日期以将其插入数据库。
我有这样的代码。
Date date = txtToday.getText();
我知道应将其解析为与Data
数据类型兼容的类型。
此Date
类型来自java.sql.Date
。
我怎样才能克服这个问题。?
答案 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 Answer至duplicate Question。
使用现代java.time类而不是麻烦的遗留日期时间类。
无需使用java.sql.Date
。该课程由LocalDate
取代。 LocalDate
类表示没有时间且没有时区的仅限日期的值。
符合JDBC 4.2的JDBC驱动程序可以通过调用:
直接处理java.time类型PreparedStatement::setObject
ResultSet::getObject
要向用户显示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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。