将"new java.util.Date()"转换为提前1个月的日期

5

我正在使用jaspersoft的iReport,我想将new java.util.Date()(即当前日期)转换为该日期之前1个月。我应该在文本字段表达式中写什么来实现这一点?

3个回答

13
你可以使用Joda-Time Java API。在DateTime对象上调用minusMonths方法。
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>

结果将是:

The result in iReport

注意:不要忘记将Joda-Time库添加到类路径中(在我的情况下,我已经将库添加到iReport的类路径中)。

得到了我想要的结果!唯一(小)的问题是它转换成了05.05.2012而不是我更喜欢的05/05/2012。 - precose
@precose 只需添加 joda-time-2.1.jar 即可。您是否重新启动了JR服务器? - Alex K
你可以使用任何想要的模式。 - Alex K
啊,是的,我太蠢了。问题已经完全解决了。谢谢(还有其他两个尝试帮助我的人)为所有的一切!非常感激! - precose

2

1
您可以按照以下方式使用日历类:
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而不是new Date()。对此感到抱歉...


它没有出现错误地接受了该字符串,但是它显示的是“null”,而不是“05/05/2012”。 - precose
1
抱歉 - 我没有看到 add 返回的是 void,而不是修改后的日期。请忽略我的表达。 - rlinden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接