Jasper报告日期不会根据给定的格式更改

时间:2014-07-07 17:07:48

标签: java jasper-reports

我正在尝试获取我需要的日期格式,但iReport中的预览始终显示相同的格式:dd / mm / yy,而在导出到xls后,我在所有单元格中获得dd-MMM-yy。 我的xml看起来像

                    <jr:detailCell style="table 2_TD" height="20" rowSpan="1">
                    <textField pattern="MMMMM dd, yyyy">
                        <reportElement x="0" y="0" width="90" height="20" uuid="1a3dc360-984e-4029-af37-ffa54c84f1c3"/>
                        <textFieldExpression><![CDATA[$F{DECISION_DATE}]]></textFieldExpression>
                    </textField>
                    </jr:detailCell>

我做错了什么? 我使用JRXlsExporter将导出报告发送到xls。 字段DATE类型是

<field name="DECISION_DATE" class="java.lang.String"/>

1 个答案:

答案 0 :(得分:1)

查看Jasper Reports库提供的示例,我可以找到类似的内容:

<field name="OrderDate" class="java.util.Date"/>

...

<textField isStretchWithOverflow="true" pattern="yyyy, MMM dd">
    <reportElement positionType="Float" x="54" y="2" width="87" height="10" uuid="1886b1ce-67ff-4457-89de-7baeae1446d0"/>
    <textElement textAlignment="Center"/>
    <textFieldExpression><![CDATA[$F{OrderDate}]]></textFieldExpression>
</textField>

请注意(在此示例报告中),字段OrderDate被声明为java.util.Date个对象。因此,我认为要使pattern属性起作用,textFieldExpression必须包含java.util.Date个对象。

但是,在您的情况下(如我们的评论中所述),您的字段类型为java.lang.String。类似的东西:

<field name="DECISION_DATE" class="java.lang.String"/>

由于textField的{​​{1}}属性不适用于您的pattern字段,解决方案可能是直接在{{1}中格式化您的字段值(字符串) },加入DECISION_DATE属性。例如(基于您的代码):

textFieldExpression

请注意,我放置pattern的位置应该为您的时间戳添加掩码。当使用带有<textField> <reportElement x="0" y="0" width="90" height="20" uuid="1a3dc360-984e-4029-af37-ffa54c84f1c3"/> <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("MMMM dd, yyyy").format(new java.text.SimpleDateFormat("<your timestamp mask>").parse($F{DECISION_DATE}))]]></textFieldExpression> </textField> 数据类型的SQLite时,生成的字符串为“2014-05-18 01:18:18”(对于<your timestamp format>字段),因此您可以使用掩码“yyyy-MM” -dd HH:mm:ss“,例如。