3

我在 JasperServer 论坛上发布了这个,但总体而言,我在 StackOverflow 上的运气更好。如果可以的话请帮忙。

我最大的抱怨JasperServer是它的行为完全不同于JasperReport(特别是在 中开发的报告iReport)。

我现在看到的问题是日期显示为输入参数的日期前一天(实际上,正好是前 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 日视为开始日期。

当我修改 JRXML 以考虑“repo:subreport_name”格式JasperServer并运行此报告并将JasperServer输出通过电子邮件发送给我时,我得到了不同的结果:

2010 年 6 月 30 日晚上 8:00

这对我来说似乎是一个错误。

4

2 回答 2

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);

输出:2010 年 7 月 1 日星期四 00:00:00 BST

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

输出2010 年 6 月 30 日星期三 16:00:00 PDT与同一日期。

有点技巧,但您可以将时间设置为当天晚些时候,以确保它获得正确的日期,例如:

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

编辑:

设置 jasper 报告时区的正确方法是通过数据源。

例如,在传递给您的报告之前,只需在您的数据源上调用该setTimeZone()方法

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

问题是服务器看到没有设置时区,所以只使用默认值导致您的日期错误。

于 2010-07-29T10:52:35.513 回答
1

直接从马嘴里说:

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

于 2010-07-30T17:11:03.897 回答