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

Posted

技术标签:

【中文标题】JasperReports 未将 postgresql 时间戳转换为简单日期【英文标题】:JasperReports not converting postgresql timestamp to simple date 【发布时间】:2016-03-25 23:47:03 【问题描述】:

我看到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 类型。&lt;field name="action_on" class="java.sql.Timestamp"&gt; 我只希望打印像 22/08/1522/08/2015 这样的日期并且不希望打印时间,所以当我尝试投射或使用 action_on::date 时,我得到 22/08/15 12:00 AM 打印时间 总是 12:00 AM。更让我困惑的是,当我在终端上尝试这个命令时,它没有给我时间,只有未格式化的日期! 有解决办法吗?

编辑 我将&lt;field name="action_on" class="java.sql.Timestamp"&gt; 更改为&lt;field name="action_on" class="java.lang.String"&gt;,我得到了日期2015-08-22! 现在有办法格式化吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢,对我帮助很大。【参考方案2】:

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

<textField pattern="dd-MM-yyyy">
    <reportElement x="0" y="o"  uuid="b8baea82-84c4-42fa-bccd-62abc96eeded"/>
    <textElement verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$Faction_on]]></textFieldExpression>
</textField>

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

【讨论】:

接受优势部分的答案!谢谢:D

以上是关于JasperReports 未将 postgresql 时间戳转换为简单日期的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 9.1 的 Docker 容器未将端口 5432 暴露给主机

Amazon RDS-Postgres未将索引用于SELECT查询

休眠错误配置:未将工厂绑定到 JNDI,未配置 JNDI 名称

Jasperreports的XSD翻译

JasperReports教程_编程入门自学教程_菜鸟教程-免费教程分享

我可以像D3.js一样使用JasperReports吗?