我正在 iReport
中创建报告用户输入日期,例如。 2014年9月14日
报告随后需要打印2014-09-01和2014-09-30
("所选月份和年份的第一天"以及"所选月份和年份的最后一天")
我一直试图让它与
一起使用new java.util.Date(new java.util.GregorianCalendar($P{ds_endDate}.getYear(),$P{ds_endDate}.getMonth(),1).getTimeInMillis())
// end result must be java.util.Date
但是没有运气
答案 0 :(得分:1)
如果您想在jasper报告中执行此操作,那么最好的方法是使用variable
示例:假设日期作为参数到达(如果您自然喜欢它可以是一个字段,您只需要切换变量的计算方式)。
传入日期(我直接使用java.util.Calendar
作为类并设置默认值,以便我可以在预览中进行测试)
<parameter name="date" class="java.util.Calendar" isForPrompting="false">
<defaultValueExpression><![CDATA[new GregorianCalendar()]]></defaultValueExpression>
</parameter>
变量定义,这是月初,使用getActualMaximum
代替getActualMinimum
<variable name="beginningOfMonth" class="java.util.Calendar">
<initialValueExpression><![CDATA[new java.util.GregorianCalendar($P{date}.get(Calendar.YEAR),$P{date}.get(Calendar.MONTH) ,$P{date}.getActualMinimum(Calendar.DAY_OF_MONTH))]]></initialValueExpression>
</variable>
因为我们使用参数足以设置initialValueExpression
如果您使用字段,则需要设置variableExpression
多数民众赞成我们有我们的日期,请在textField
实施例
<textField>
<reportElement x="22" y="11" width="100" height="20" uuid="1a094181-bcf1-469c-a786-77a0b7a3d533"/>
<textFieldExpression><![CDATA[new java.text.SimpleDateFormat("yyyy-MM-dd").format($V{beginningOfMonth}.getTime())]]></textFieldExpression>
</textField>
注意:如果你使用旧版本的jasper报告(3.1 ecc),你需要在不同的表达式上设置正确的类
答案 1 :(得分:0)
试试这个:
Calendar abc = new GregorianCalendar();
System.out.println(abc.getActualMaximum(Calendar.DAY_OF_MONTH) + " and " + abc.getActualMinimum(Calendar.DAY_OF_MONTH));
答案 2 :(得分:0)
我通过在报告查询中使用一些SQL并打印该字段
来实现它SQL看起来像这样
Select LAST_DAY('2014-09-14') lastDay,
DATE_ADD((DATE_ADD(LAST_DAY('2014-09-14') ,INTERVAL 1 DAY)) ,INTERVAL -1 MONTH) firstDay
注意:将'2014-09-14'替换为reprot上的输入参数,例如。 $ P {dateEntered}