[RESOLVIDO] - problema com timezone - JSF

Olá a todos,

Estou utilizando o converter de data do JSF e para funcionar adequadamente,

tive de setar o atributo do converter

<f:convertDateTime pattern="MM/yyyy" timezone="GMT-3"/>
Para não fazer isto na aplicação toda, resolvi iniciar a JVM com este parâmetro:
-Duser.timezone
Porém, agora quando faço
new Date()
ele retorna
Tue Sep 01 18:01:09 GMT 2009
quando ainda são 15h no Brasil, o que não está errado, porém o retorno

do converter para 01/01/2009 é 01/01/2009, quando teoricamente deveria ser 01/01/2009 03h00.

E agora, o que faço? Não queria fazer gambiarra pra resolver.... Alguma idéia?

Resolvi!

Para referência futura:

Ao invés de fazer isto:

  <f:convertDateTime pattern="MM/yyyy" timeZone="GMT-3"/>  

o que se um dia eu resolvesse trocar o timezone teria de trocar em todo o projeto, eu fiz o seguinte:

pagina.xhtml

  <f:convertDateTime pattern="MM/yyyy" timeZone="#{initParam.timezone}"/>  

web.xml

  <context-param>
    <param-name>timezone</param-name>
    <param-value>GMT-3</param-value>
  </context-param> 

Para quem tem o mesmo problema, se vc tentar resolver fazendo

  -Duser.timezone='GMT-3'  

você vai ter o problema de quando criar um new Date() a hora vai estar 3 horas adiantados.

É isso ai…

Olá pessoal sei que o post já está como resolvido, mas segue uma dica.

em web.xml adicione esses parâmetros

<context-param>
  <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
  <param-value>true</param-value>
</context-param>

Nesse caso ele vai usar o timezone default da máquina. Claro isso ainda tem implicações com o banco de dados caso ele esteja em outro servidor com timezone diferente e assim vai.

Flow.

2 curtidas

Gustavo,

Para quem usa a implementação do MyFaces, essa solução só está disponível a partir da versão 2:

https://issues.apache.org/jira/browse/MYFACES-2032