我正在尝试将日期作为HTML的日期标记的输入
Birth Date <input type="date" name="dob"/>
使用
访问jsp页面String strDate = request.getParameter("dob");
但它以字符串格式返回,我想将其转换为日期,我尝试如下
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(strDate);
但是它给出了错误
需要不兼容的类型:找到java.sql.Date:java.util.Date
当我导入pakage“java.util。*”以使用java.util.Date date = sdf.parse(strDate);
时,它会给出
对Date的引用是不明确的,java.util中的类java.util.Date和java.sql中的类java.sql.Date匹配
答案 0 :(得分:4)
如果您需要java.sql.Date
(并且需要不兼容类型:找到java.sql.Date:java.util.Date 表示您这样做),请删除{{1}的导入并使用java.util.Date
返回的java.util.Date
来构建DateFormat
,其内容类似于
java.sql.Date
答案 1 :(得分:3)
LocalDate.parse( "2018-01-23" )
Answer by Elliott Frisch是正确的。有一条评论询问是否建议更好的转换。确实有更好的方法。额外奖励:更好的方法可以避免原始问题,让java.util.Date
与java.sql.Date
混淆。
Java 8及更高版本中内置的java.time框架取代了设计糟糕的旧java.util.Date
/ .Calendar
类及其亲属。新课程的灵感来自非常成功的Joda-Time框架,在概念上类似但重新设计。由JSR 310定义。请参阅Oracle Tutorial。由ThreeTen-Extra项目扩展。后端移植到Java 6&amp; 7由ThreeTen-Backport项目提供,该项目由Android项目包含在ThreeTenABP中使用。
LocalDate
类代表一个仅限日期的值,没有时间和没有时区。
您的输入字符串恰好符合ISO 8601标准。
默认情况下,此标准在java.time类中用于解析/生成日期时间字符串。因此无需指定格式化模式。
LocalDate localDate = LocalDate.parse( "2016-01-23" );
从JDBC 4.2及更高版本开始,您可以通过getObject
/ setObject
方法直接与数据库交换 java.time 对象。
插入/更新。
myPreparedStatement.setObject( … , localDate ) ;
检索。
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;
如果尚未针对JDBC 4.2或更高版本更新JDBC driver,请在java.time和java.sql类型之间进行转换。旧的java.sql类具有此类转换的新方法。
对于LocalDate
,转换为java.sql.Date
类(假装为仅限日期的值)。
java.sql.Date mySqlDate = java.sql.Date.valueOf( localDate );
......走向另一个方向......
java.time.LocalDate localDate = mySqlDate.toLocalDate();
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。