日期出现在JasperServer中编程的前一天

时间:2010-07-28 19:54:35

标签: java date jasper-reports jasperserver

我在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以考虑JasperServer的“repo:subreport_name”格式并运行此报告并让JasperServer通过电子邮件将输出发送给我时,我得到了不同的结果:

6/30/10 8:00 PM

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

2 个答案:

答案 0 :(得分: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);

输出 2010年6月30日星期三16:00(太平洋时间2010年6月1日),日期相同。

有点破解,但你可以将时间设置为当天晚些时候,以保证它能够获得正确的一天,例如:

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

修改

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

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

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

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

答案 1 :(得分:1)