将字符串转换为日期时,java.util.Date和java.sql.Date之间存在歧义
我试图从HTML的日期标签中获取日期作为输入将字符串转换为日期时,java.util.Date和java.sql.Date之间存在歧义,java,date,ambiguity,date-conversion,Java,Date,Ambiguity,Date Conversion,我试图从HTML的日期标签中获取日期作为输入 出生日期 并使用 String strDate = request.getParameter("dob"); 但是它以字符串的格式返回,我想将它转换为日期,我尝试了以下方法 SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(strDate); 但这会产生错误 需要不兼容的类型:java.sql.Date找到:java.util.Date
出生日期
并使用
String strDate = request.getParameter("dob");
但是它以字符串的格式返回,我想将它转换为日期,我尝试了以下方法
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(strDate);
但这会产生错误
需要不兼容的类型:java.sql.Date找到:java.util.Date
当我导入包“java.util.*”以使用java.util.Date=sdf.parse(strDate)时代码>它给出
对日期的引用不明确,java.util中的类java.util.Date和java.sql中的类java.sql.Date都匹配
如果您需要java.sql.Date
(并且需要不兼容的类型:java.sql.Date找到:java.util.Date表示您需要),请删除java.util.Date
的导入,并使用DateFormat
返回的java.util.Date
构造一个java.sql.Date
的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = new Date(sdf.parse(strDate).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
tl;博士
细节
答案是正确的。有一条评论问,是否有更好的转换建议。确实有更好的办法。好处:这种更好的方法避免了原来的问题,将java.util.Date
与java.sql.Date
混淆
java.time
内置于Java8和更高版本中的框架取代了设计拙劣的旧Java.util.Date
/.Calendar
类及其亲属。新类的灵感来自于非常成功的框架,在概念上相似,但经过了重新设计。定义为。看。由项目扩展。项目将其向后移植到Java6和Java7,并对其进行包装以供项目使用
该类表示一个仅限日期的值,不含一天中的时间和时区
ISO 8601
您的输入字符串恰好符合标准
默认情况下,java.time类中使用此标准来解析/生成日期时间字符串。因此,无需指定格式化模式
LocalDate localDate = LocalDate.parse( "2016-01-23" );
数据库
从4.2及更高版本开始,您可以通过getObject
/setObject
方法直接与数据库交换java.time对象
JDBC4.2及更高版本
插入/更新
myPreparedStatement.setObject( … , localDate ) ;
检索
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;
JDBC4.1及更早版本
如果尚未更新JDBC 4.2或更高版本,请在java.time和java.sql类型之间进行转换。旧的java.sql类有新的转换方法
对于LocalDate
,将其转换为类(假装为仅日期值)
…然后去另一个方向
java.time.LocalDate localDate = mySqlDate.toLocalDate();
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(您可能仍然导入了
java.sql.Date
。删除它,错误就会消失。仅供参考,像、java.text.simpleDataFormat
这样的麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。请参阅。
java.sql.Date mySqlDate = java.sql.Date.valueOf( localDate );
java.time.LocalDate localDate = mySqlDate.toLocalDate();