在iReport中操作日期

时间:2013-04-19 16:21:15

标签: jasper-reports ireport

我有datetime列,其数据如:2013-04-19 23:44:27.357

iReport 中我使用表达式new SimpleDateFormat("h:mma").format($F{domain_datetime})来仅显示时间。

在上面的表达式中,我想说如果时间大于23:59,那么我希望显示一天,而不是显示时间,例如5月13日,否则显示时间。

怎么做?

2 个答案:

答案 0 :(得分:1)

如果您不关心超过秒的信息,并且只想将当前表达式格式化为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})

现在这样可行,但它只为表达式创建了3个新的SimpleDateFormat个实例,只需要2个或需要(我也很想知道它是否会为每一行创建3个新的SimpleDateFormat个对象,但我不知道是不是这样)。所以在我看来,这可以改善一些。

在报告中创建两个将为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})

答案 1 :(得分:0)

如果您使用的是JRBeanCollectionDataSource,为什么不对用于填充报表的查询执行此操作?这样你只需要显示一个文本,无论它是什么