Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为日期时,java.util.Date和java.sql.Date之间存在歧义_Java_Date_Ambiguity_Date Conversion - Fatal编程技术网

将字符串转换为日期时,java.util.Date和java.sql.Date之间存在歧义

将字符串转换为日期时,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

我试图从HTML的日期标签中获取日期作为输入

出生日期

并使用

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();