Дата появляется за день до того, что запрограммировано в JasperServer
Я разместил это на форумах JasperServer, но мне больше повезло с Stackru в целом. Пожалуйста, помоги, если можешь.
Моя самая большая жалоба о 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
отправьте мне по электронной почте вывод, я получу другой результат:
30.06.10 20:00
Это похоже на ошибку для меня.
2 ответа
Прямо изо рта лошади:
http://jasperforge.org/plugins/espforum/view.php?group_id=112&forumid=107&topicid=77176
Похоже, проблема с часовым поясом.
Кажется, ваша дата печатается 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 PDT 2010 с той же датой.
Немного хак, но вы можете установить час позже, чтобы гарантировать, что он получит правильный день, например:
new Date(new Date().getYear(), 3, 1,23,59);
Редактировать:
Правильный способ установить часовой пояс в отчете о яшме - через источник данных.
Просто позвони setTimeZone()
метод на вашем источнике данных, прежде чем перейти к вашему отчету, например
mydatasource.setTimeZone(TimeZone.getTimeZone("BST"));
Проблема в том, что сервер не видит часовой пояс, поэтому просто использует значение по умолчанию, вызывающее ошибку даты.