【问题标题】:Cannot cast java.util.date to java.sql.date [duplicate]无法将 java.util.date 转换为 java.sql.date [重复]
【发布时间】:2018-04-03 18:02:30
【问题描述】:

我有以下代码 sn-p,在将 java.util.date 转换为 java.sql.date 时出现连续错误。

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        storedProcedureCall.setLong(1, 12345);
        storedProcedureCall.setDate(2, (java.sql.Date) sdf.parse("09/02/2017"));
        storedProcedureCall.setDate(3, (java.sql.Date) sdf.parse("10/02/2017"));

我在这里做错了什么。我也导入了 java.util.Date 包。

【问题讨论】:

标签: java date


【解决方案1】:

java.util.Date 类与java.sql.Date 完全不同。因此它不能被强制转换。

您可能打算使用java.util.Date。检查storedProcedureCall#setDate的签名,它可能不小心导入了java.sql.Date而不是java.util.Date


请注意,现在不应再使用 Date 类。而是使用位于包java.time 中的新现代API。像这样:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDateTime dateTime = LocalDateTime.parse(dateAsString, formatter);

【讨论】:

  • 不正确,java.util.Datejava.sql.Date “完全不同”。不幸的是,恰恰相反。 java.sql.Date 继承自 java.util.Date。因此,虽然java.sql.Date 假装只保存一个没有时间和时区的日期,但它确实同时保存了一个时间和一个时区。实际上 两个 时区 - 虽然日期时间作为 UTC 计数跟踪(因此代表 UTC 的时刻),实际上在源代码深处分配了一个时区,没有任何 getter/setter .糟糕设计的总火车残骸。请改用 java.time
猜你喜欢
  • 2011-08-29
  • 2016-02-14
  • 2015-04-03
  • 2012-08-21
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2012-12-04
  • 2020-03-03
相关资源
最近更新 更多