如何在给定的参数日期添加1天?得到`java.util.Date无法转换为java.sql.Date`错误

时间:2017-06-28 19:10:45

标签: java jasper-reports

我想在给定的参数日期添加1天。

Jaspersoft Studio 中,我有以下参数

$P{datestart}
Class: java.sql.Date
Default value expression: new Date()

$V{datev}
Class: java.sql.Date
Expression: new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000)

然后我在报告中使用$V{datev}

输出错误:

Error evaluating expression for source text: 
new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000)  
java.util.Date cannot be cast to java.sql.Date

我尝试了不同的表达但没有运气

Change $v{datev} to new java.util.Date($P{datestart}.getTime() + 24*60*60*1000).
Change $P{datestart} to: new SimpleDateFormat("dd-MM-yyyy").format(new Date())

有人看到我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

看起来$P{datestart}参数的定义是错误的。

如果 datestart 参数具有 java.util.Date java.sql.Date 类型,则表达式new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000)有效。 您可能知道,java.sql.Date类是java.util.Date

的子类

Java 代码运行良好:

java.util.Date date = new java.util.Date();
new java.sql.Date(date.getTime() + 24*60*60*1000);

java.sql.Date sqlDate = new java.sql.Date(date.getTime());
new java.sql.Date(sqlDate.getTime() + 24*60*60*1000);

尝试更改 datestart 的类型,甚至更改两者(参数和变量)的类型。

至少你需要修复 datestart 参数的初始化。

没有java.sql.Date()(没有参数)构造函数。看起来你正在使用类似 Java 代码的表达式,如下所示:

java.sql.Date sqlDate = new java.util.Date(); // not even compile. Got incompatible types: java.util.Date cannot be converted to java.sql.Date

此声明适用于$P{datestart}的{​​{1}}:

java.sql.Date