Установите часовой пояс по умолчанию для f: convertDateTime
Я использую JSF1.2, и у меня небольшая проблема с часовыми поясами.
Календарь соблюдает мой часовой пояс и сохраняет правильное время в базе данных. Когда я показываю его с помощью h: outputtext с f: convertDateTime, он показывает неправильную дату (я думаю, с часовым поясом по умолчанию).
Я могу сделать что-то вроде:
<h:outputText value="#{atividade.atividade.dataCriacao.time}">
<f:convertDateTime pattern="#{msg.formatoDataCalendario2}" timeZone="America/Sao_Paulo" />
</h:outputText>
formatoDataCalendario2 = dd/MM/yyyy, HH: mm в messages.properties.
Я могу поместить часовой пояс в сообщениях, но я считаю, что у него есть какая-то конфигурация, которую я мог бы использовать.
Ответы
Ответ 1
Преобразователи даты/времени JSF по умолчанию задают часовой пояс UTC. Если вы хотите использовать другой часовой пояс, вам действительно нужно указать его в конвертере самостоятельно. Или, если у вас есть 100% -ный контроль над производственной средой выполнения, то с JSF 2.0 вы можете установить системный часовой пояс в желаемый часовой пояс и добавить следующий параметр контекста в web.xml
:
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
Таким образом, JSF будет использовать системный часовой пояс, полученный с помощью TimeZone#getDefault()
в качестве временной шкалы конвертера по умолчанию.
Обратите внимание, что объект java.util.Date
сам по себе также не сохраняет информацию о часовом поясе. Он также всегда по умолчанию использует часовой пояс UTC. Помните об этом при обработке поданной даты/времени.
См. также:
Ответ 2
Для правильной отображения даты вам нужно изменить только в своем web.xml
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
и в вашем файле xhtml
<h:outputText value="#{report.date}">
<f:convertDateTime pattern="dd-MMM-yyyy" />
</h:outputText>
Его проблема с часовым поясом. Параметр context должен его исправить.