如何获取特定月份和年份的开始和结束日期

时间:2014-10-28 08:22:20

标签: java date jasper-reports

我正在 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 

但是没有运气

3 个答案:

答案 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}