我在Eclipse中遇到日期问题。我在TextField中显示格式为
的日期 dd/MM/yyyy
我需要从这个文本字段中获取文本并将其解析为将其插入我的数据库中的日期,将其插入DATE
类型的列中我使用MySQL并接受日期为
yyyy-MM-dd
我尝试了许多选项,包括LocalDate
或旧Date
,但没有找到解决方案。有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
您想使用SimpleDateFormat
类
从TextField中提取后,您可以使用:
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
答案 1 :(得分:0)
试试这个:
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
Date date = df.parse("2016-03-05");
答案 2 :(得分:0)
首先,在从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));
如@BasilBourque所述,Java日期和时间机制由java.util.Date,java.util.Calendar和java.util.TimeZone类提供,现在是legacy。
因此,为了完成前面提到的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);
之后,为了将LocalDate
转换为java.sql.Date
,将其存储到MySQL数据库中,可以执行以下操作:
java.sql.Date sqlDate = java.sql.Date.valueOf(textFieldAsDate);
答案 3 :(得分:0)
其他答案是正确的,但使用过时的类。旧的日期时间类(如java.util.Date/.Calendar)已被证明设计不当,令人困惑且麻烦。避免他们。它们已被Java 8及更高版本中内置的java.time框架所取代。
定义用于解析输入字符串的模式。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
将输入字符串解析为LocalDate
对象,表示没有时间或时区的仅日期值。
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类型。
PreparedStatement::setObject
ResultSet::getObject
这个问题实际上是重复的。搜索Stack Overflow以获取更多示例。
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。