Дата появляется за день до того, что запрограммировано в 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 ответа

Решение

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

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

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

Другие вопросы по тегам