次のようなデータを持つ日時列があります: 2013-04-19 23:44:27.357
iReportでは、式new SimpleDateFormat("h:mma").format($F{domain_datetime})
を使用して時間のみを表示しています。
上記の式では、時刻が 23:59 より大きい場合は、時刻を表示する代わりに、たとえば 5 MAR 13 のように日を表示し、それ以外の場合は時刻を表示します。
どうやってするの?
次のようなデータを持つ日時列があります: 2013-04-19 23:44:27.357
iReportでは、式new SimpleDateFormat("h:mma").format($F{domain_datetime})
を使用して時間のみを表示しています。
上記の式では、時刻が 23:59 より大きい場合は、時刻を表示する代わりに、たとえば 5 MAR 13 のように日を表示し、それ以外の場合は時刻を表示します。
どうやってするの?
秒を超える情報を気にせず、単に日付にフォーマットされるものをすべて変換したい 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 つの新しいインスタンスが作成されますが、必要な場合は 2 つだけです (行ごとにSimpleDateFormat
3 つの新しいオブジェクトが作成されるかどうかも知りたいのですが、そうであるかどうかはわかりません)。 SimpleDateFormat
. 私の目には、これはいくらか改善される可能性があります。
インスタンスとなる 2 つの新しいパラメーターをレポートに作成し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 でそれを実行しないのはなぜですか? そうすれば、それが何であれ、テキストを表示するだけで済みます