3

私はこれをJasperServerフォーラムに投稿しましたが、一般的にStackOverflowの方が幸運でした。できれば助けてください。

私の最大の不満は、それが(具体的には、で開発されたレポート)JasperServerとは異なる動作をすることです。JasperReportiReport

私が今見ている問題は、日付がパラメータに入力された日付の1日前(実際には正確に4時間前)として表示されることです。

これは私がJRXMLのデフォルト値式に入れたものです:

 ((new Date().getMonth() / 3) + 1 == 1)? new Date(new Date().getYear(), 0, 1) :

((new Date().getMonth() / 3) + 1 == 2)? new Date(new Date().getYear(), 3, 1) :

((new Date().getMonth() / 3) + 1 == 3)? new Date(new Date().getYear(), 6, 1) :

new Date(new Date().getYear(), 9, 1) 

このコードは、のデフォルト値式内から四半期の初めを正しく計算するように機能しますJasperReports。これを実行するiReportと、何の問題もありません。この四半期に実行したレポートについては、2010年7月1日を開始日としています。

JasperServerこのレポートの「repo:subreport_name」形式を考慮してJRXMLを変更しJasperServer、出力を電子メールで送信すると、別の結果が得られます。

2010年6月30日午後8時

これは私にはバグのようです。

4

2 に答える 2

1

馬の口から真っ直ぐに:

http://jasperforge.org/plugins/espforum/view.php?group_id=112&forumid=107&topicid=77176

于 2010-07-30T17:11:03.897 に答える
1

タイムゾーンの問題のようです。

過去4時間の日付を印刷しているようです。

実行しているサーバーはどこですか?

タイムゾーンを確認できますか?

たとえば、このコードを見てください。タイムゾーンに応じて、異なる日と月が印刷されます。

Date date = ((new Date().getMonth() / 3) + 1 == 1) ? new Date(new Date().getYear(), 0, 1)
    :((new Date().getMonth() / 3) + 1 == 2) ? new Date(new Date().getYear(), 3, 1) 
    :((new Date().getMonth() / 3) + 1 == 3) ? new Date(new Date().getYear(), 6, 1) 
    :new Date(new Date().getYear(), 9, 1);
System.out.println(date);

出力: Thu Jul 01 00:00:00 BST 2010

TimeZone.setDefault(TimeZone.getTimeZone("PST"));
System.out.println(date);

同じ日付のWed Jun 30 16:00:00 PDT 2010を出力します。

ちょっとしたハックですが、たとえば、適切な日を確実に取得するために、時間をその日の後半に設定できます。

new Date(new Date().getYear(), 3, 1,23,59); 

編集:

ジャスパー レポートのタイム ゾーンを設定する正しい方法は、データ ソースを使用することです。

setTimeZone()たとえば、レポートに渡す前にデータソースでメソッドを呼び出すだけです

mydatasource.setTimeZone(TimeZone.getTimeZone("BST"));

問題は、サーバーがタイムゾーンが設定されていないことを認識しているため、デフォルトを使用するだけで日付エラーが発生することです。

于 2010-07-29T10:52:35.513 に答える