дата появляется за день до того, что запрограммировано в JasperServer - PullRequest
3 голосов
/ 28 июля 2010

Я разместил это на форумах 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 20:00

Мне это кажется ошибкой.

Ответы [ 2 ]

1 голос
/ 30 июля 2010
1 голос
/ 29 июля 2010

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

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

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

...