дата появляется за день до того, что запрограммировано в 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, я не вижу никаких проблем. Для всех отчетов, которые я запускаю в этом квартале, я вижу 1 июля 2010 года в качестве даты начала.

Когда я изменяю JRXML для учета формата "repo:subreport_name" JasperServer и запускаю этот отчет, а JasperServer отправляю мне его по электронной почте, я получаю другой результат:

6/30/10 8:00 PM

Это кажется мне ошибкой.


person Ramy    schedule 28.07.2010    source источник
comment
Пытался загрузить скриншот, но не смог добавить его напрямую в комментарии. Похоже, что TimeZone установлен правильно, когда я вхожу в систему.   -  person Ramy    schedule 30.07.2010


Ответы (2)


Похоже на проблему с часовым поясом.

Кажется, он печатает вашу дату 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);

Выходные данные: Четверг, 01 июля, 00:00:00 BST 2010

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

Выходные данные 30 июня 16:00:00 по тихоокеанскому времени 2010 с той же датой.

Немного хака, но вы можете установить час позже в тот же день, чтобы гарантировать, что он попадет в правильный день, например:

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

Изменить:

Правильный способ установить часовой пояс в отчете jasper — через источник данных.

Просто вызовите метод setTimeZone() в вашем источнике данных, прежде чем переходить к отчету, например.

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

Проблема в том, что сервер видит, что часовой пояс не установлен, поэтому просто использует значение по умолчанию, вызывающее ошибку даты.

person Gordon    schedule 29.07.2010
comment
Это почти наверняка проблема. Однако я не могу установить TimeZone, как в приложении Java. - person Ramy; 29.07.2010
comment
я нашел это: jasperforge.org/plugins/espforum/ что указывает на это: jasperforge.org/plugins /эсфорум/ - person Ramy; 29.07.2010
comment
что фактически говорит об этом: проблема решена путем отключения настройки часового пояса для источников данных, используемых в JasperServer. По-видимому, если это поле оставить пустым в конфигурации источника данных, он будет использовать местный часовой пояс (поскольку я нахожусь в 7-8 часах от GMT, расчеты разницы во времени приводили к тому, что даты выпадали на один день). как мне отключить настройку часового пояса для источников данных, используемых в JasperServer? - person Ramy; 29.07.2010
comment
Да, это немного хак. Я определенно мог бы это сделать, единственная проблема в том, что если я когда-нибудь выясню, как сбросить настройку часового пояса для источников данных... мне придется вернуться и рискнуть все это вернуть.... Если я этого не сделаю найти ответ EOD, мне придется использовать это. - person Ramy; 30.07.2010
comment
Гордон, я очень ценю твою помощь в этом. Где бы я создал объект mydatasource, который вы описываете?? Все, что я сейчас делаю, это загружаю jrxml на jasperserver. Я не вызываю jasperserver программно или что-то в этом роде. - person Ramy; 30.07.2010
comment
Какой источник данных на сервере jasper использует ваш отчет? Вы должны установить часовой пояс внутри этого. - person Gordon; 30.07.2010
comment
Ты прав, Гордон. Итак, я залогинился и перешел к источнику данных для отчета в репозитории. Я установил флажок для этого источника данных и нажал «Изменить». ТАМ я нашел раскрывающийся список (похожий на тот, что на экране входа в систему), но с возможностью оставить его пустым. Почему он не использует EST, когда EST выбран как на экране входа в систему, так и в конфигурации источника данных, совершенно не для меня.... - person Ramy; 30.07.2010
comment
Джаспером управляет стая бурундуков. - person sam yi; 05.12.2012

Прямо изо рта лошади:

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

person Ramy    schedule 30.07.2010