我正在使用jaspersoft的iReport,我希望将new java.util.Date()
(当前日期)变为该日期之前的1个月。我在文本字段表达式中写什么来实现这个目标?
答案 0 :(得分:12)
您可以使用Joda-Time Java API。在minusMonths
对象上调用DateTime
方法。
jrxml文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="joda_sample" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<import value="org.joda.time.DateTime"/>
<title>
<band height="79" splitType="Stretch">
<textField>
<reportElement x="109" y="23" width="175" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["Current date: " + new SimpleDateFormat("dd.MM.yyyy").format(new Date())]]></textFieldExpression>
</textField>
<textField>
<reportElement x="336" y="23" width="200" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["Current date minus one month: " + DateTime.now().minusMonths(1).toString("dd.MM.yyyy")]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
结果将是:
<强> 注意:的强> 不要忘记将Joda-Time库添加到类路径中(在我的情况下,我将库添加到 iReport 的类路径中)。
答案 1 :(得分:2)
Java Date API非常笨拙,有一个有用的第三方替代方案。尝试导入http://joda-time.sourceforge.net/库。
答案 2 :(得分:1)
您可以通过以下方式使用Calendar课程:
Calendar c=Calendar.getInstance();
c.setTime(myDate); //Yes, it is strange!!! But we don't really need this, for the getInstance() results in a current date.
c.add(Calendar.MONTH, -1);
我在评论后意识到我无法将其更改为单个表达式,因为add返回void而不是新的Date()。对不起...