5

jaspersoft の iReport を使用しており、new java.util.Date()(現在の日付) をその日付の 1 か月前に変更したいと考えています。これを実現するには、テキスト フィールド式に何を記述すればよいですか?

4

3 に答える 3

13

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>

結果は次のようになります。

iReport の結果

注: Joda-Time ライブラリをクラスパスに追加することを忘れないでください (私の場合、ライブラリをiReportのクラスパスに追加しました)。

于 2012-06-05T19:01:17.250 に答える
2

Java Date API は扱いにくいことで有名ですが、サードパーティの便利な代替手段があります。http://joda-time.sourceforge.net/ライブラリをインポートしてみてください。

この投稿を参照してください: JodaTime インスタントに日数を追加する

于 2012-06-05T19:04:13.057 に答える
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は新しいDate()ではなくvoidを返すからです。申し訳ありません...

于 2012-06-05T18:47:52.027 に答える