gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:45 24 4
gpt4 key购买 nike

我在 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

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

最佳答案

看来是时区问题。

它似乎在打印你过去 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 具有相同的日期。

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

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

编辑:

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

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

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

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

关于java - 日期出现在 JasperServer 中编程日期的前一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com