取“new java.util.Date()”并在1个月之前完成

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

您可以使用Joda-Time Java API。 在DateTime对象上调用minusMonths方法。

jrxml文件示例:

     <band height="79" splitType="Stretch"> <textfield> <reportelement x="109" y="23" width="175" height="20"></reportelement> <textelement></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"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA["Current date minus one month: " + DateTime.now().minusMonths(1).toString("dd.MM.yyyy")]]></textfieldexpression> </textfield> </band>   

结果将是:

结果在iReport中

注意:不要忘记将Joda-Time库添加到类路径中(在我的例子中,我将库添加到iReport的类路径中)。

Java Date API非常笨拙,有一个有用的第三方替代方案。 尝试导入http://joda-time.sourceforge.net/库。

看到这篇文章: 为JodaTime Instant添加一些天

您可以通过以下方式使用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()。 对于那个很抱歉…