JasperReports没有将postgresql时间戳转换为简单日期

时间:2015-12-19 10:23:46

标签: jasper-reports date-parsing

我看到this问题与我的问题类似,但是解决方法仍然给我一个错误。

我的.jrxml文件中有一个像这样的SQL查询字符串

<queryString>
        <![CDATA[select sl_no,cast(action_on as date) from action_history]]>
</queryString> 

我使用Eclipse插件JasperStudio来设计模板,并使用PostgreSql作为我的数据库。现在,此查询正在按预期正确获取数据。

我的action_on是java.sql.Timestamp类型 <field name="action_on" class="java.sql.Timestamp">
 我只希望打印22/08/1522/08/2015之类的日期,并且不希望打印时间,因此当我尝试投射或使用action_on::date时,我得到{{1}打印时间始终 12:00 AM。令我更加困惑的是,当我在终端上尝试此命令时,它不会给我时间,只有未格式化的日期!
有解决方法吗?

编辑
我将22/08/15 12:00 AM 更改为<field name="action_on" class="java.sql.Timestamp">,我得到了日期<field name="action_on" class="java.lang.String">! 现在有办法格式化吗?

2 个答案:

答案 0 :(得分:1)

我自己解决了,所以我发布了解决问题的方法。显然,欢迎更好的解决方案!

我将字段类型转换为字符串,即问题的EDIT。要格式化日期,您现在可以使用
<![CDATA[select sl_no,to_char(action_on,'dd-MM-yyyy') as my_date from action_history]]>
不要忘记更换action_on字段声明中声明或使用my_date的每个以下实例!

答案 1 :(得分:0)

另一种解决方案是使用pattern标记上的textField属性>在查询中(但在输出时格式化)

<textField pattern="dd-MM-yyyy">
    <reportElement x="0" y="o" width="100" height="20"uuid="b8baea82-84c4-42fa-bccd-62abc96eeded"/>
    <textElement verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$F{action_on}]]></textFieldExpression>
</textField>

主要优势是,如果您导出到例如,则列将正确填充日期对象(因此excel的用户可以在日期对象上过滤/排序/格式化。)