我在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
这对我来说似乎是个错误。
答案 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)