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 类型。<field name="action_on" class="java.sql.Timestamp">
我只希望打印像 22/08/15
或 22/08/2015
这样的日期并且不希望打印时间,所以当我尝试投射或使用 action_on::date
时,我得到 22/08/15 12:00 AM
打印时间 总是 12:00 AM。更让我困惑的是,当我在终端上尝试这个命令时,它没有给我时间,只有未格式化的日期!
有解决办法吗?
编辑
我将<field name="action_on" class="java.sql.Timestamp">
更改为<field name="action_on" class="java.lang.String">
,我得到了日期2015-08-22
!
现在有办法格式化吗?
【问题讨论】:
【参考方案1】:我自己解决了,所以我将我的解决方案发布到我的问题上。更好的解决方案显然是受欢迎的!
我将字段类型转换为字符串,即对问题做了EDIT
。要格式化日期,您现在可以使用<![CDATA[select sl_no,to_char(action_on,'dd-MM-yyyy') as my_date from action_history]]>
不要忘记将在您的字段声明中声明或使用 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 名称