我有日期时间列,其数据如下:2013-04-19 23:44:27.357
在iReport中,我使用表达式new SimpleDateFormat("h:mma").format($F{domain_datetime})
仅显示时间。
在上面的表达式中,我想说如果时间大于 23:59,那么我不想显示时间,而是显示一天,例如 13 年 3 月 5 日,否则显示时间。
怎么做?
我有日期时间列,其数据如下:2013-04-19 23:44:27.357
在iReport中,我使用表达式new SimpleDateFormat("h:mma").format($F{domain_datetime})
仅显示时间。
在上面的表达式中,我想说如果时间大于 23:59,那么我不想显示时间,而是显示一天,例如 13 年 3 月 5 日,否则显示时间。
怎么做?
如果您不关心超过几秒钟的信息,而只是想将任何格式转换 12:00AM
为日期,则可以将当前表达式替换为:
(new SimpleDateFormat("h:mma").format($F{domain_datetime}).equals("12:00AM")) ?
new SimpleDateFormat("dd MMM yy").format($F{domain_datetime}) :
new SimpleDateFormat("h:mma").format($F{domain_datetime})
现在这有效,但它SimpleDateFormat
为表达式创建了 3 个新实例,当只有 2 个或需要时(我也很想知道它是否会SimpleDateFormat
为每行创建 3 个新对象,但我不知道是否是这种情况) . 所以在我看来,这可以改进一些。
在您的报告中创建两个新参数,它们将是SimpleDateFormat
实例。他们的 XML 应该如下所示:
<parameter name="TIME_FORMAT" class="java.text.SimpleDateFormat" isForPrompting="false">
<defaultValueExpression><![CDATA[new SimpleDateFormat("h:mma")]]></defaultValueExpression>
</parameter>
<parameter name="DATE_FORMAT" class="java.text.SimpleDateFormat" isForPrompting="false">
<defaultValueExpression><![CDATA[new SimpleDateFormat("dd MMM yy")]]></defaultValueExpression>
</parameter>
它们具有日期格式化程序的默认值,我们可以在表达式中引用它们。所以现在我们可以将表达式重写为:
($P{TIME_FORMAT}.format($F{domain_datetime}).equals("12:00AM")) ?
$P{DATE_FORMAT}.format($F{domain_datetime}) :
$P{TIME_FORMAT}.format($F{domain_datetime})
如果您使用的是 JRBeanCollectionDataSource,为什么不在用于填写报告的查询或 Java 中执行此操作?这样你只需要显示一个文本,不管它是什么