[RESOLVIDO] f:convertDateTime subtraindo um dia da data informada

Bom dia, amigos do fórum.

Solicito vossa ajuda para um problema estranho que está me ocorrendo.

Vejam o seguinte codigo na minha pagina .xhtml:

<h:inputText value="#{cadastroUsuarioManagedBean.usuarioTo.dataNascimento}" styleClass="input-data" id="inputDataNascimentoComprador" name="inputDataNascimentoComprador" style="width: 100px;" required="true" requiredMessage="Informe sua Data de Nascimento." >
												<f:convertDateTime pattern="dd/MM/yyyy"  />
											</h:inputText>

A princípio, nada anormal, uma vez que o valor digitado de fato está sendo convertido.

No entanto, a data sempre está chegando ao meu atributo com um dia a menos do que digitei. Se digito 02/01/2010, vem a data 01/01/2010…se digito 01/01/2010, vem a data 31/12/2009…

Algum motivo pra ele estar se comportando dessa forma?

Minha versao do JSF é a 1.2.

Obrigado, pessoal!

tenta por um timezone tipo

timeZone=“America/Sao_Paulo”

Obrigado, caro Requena. De fato, setar o timezone da tag <f:convertDateTime> resolveu.

No entanto, creio que esse seja um pequeno bug (ai,ai…) da implementação do JSF. Estou usando a versão 1.2.13.

O que ocorre:

Dei uma olhada no fonte da classe DateTimeConverter (jsf-api.jar) e vi que por default o timezone utilizado para a conversão é GMT

private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT");

Pois bem, fiz uns testes em separado retornando o método TimeZone.getDefault() e o retorno foi GMT-03:00

Portanto, se eu fixar esse timezone na pagina, o resultado da conversão fica correto.

Acredito que o correto seria a implementação do JSF usar esse método (TimeZone.getDefault()), ao invez de fixar o GMT. Por sinal, como não sou entendido de tais, códigos, alguem saberia dizer se esse GMT-03:00 é devido ao horário de verão?Ou realmente é o correto para aplicações executando no nosso Locale?

Pergunto porque, se esse retorno for mesmo devido ao horário de verão, não poderei fixá-lo na página :cry:

Obrigado amigos.

Tipo esse default se nao me engano pega o fuso horario setado no servidor então tipo no seu relógio deve estar gmt -3 ai ele pega esse fuso horario e tb seta para o horario de verao…entao tipo estando no horario de verao ele vai pegar o fuso do cara que digitou tipo gmt alguma coisa +(gmt -3h +1hora de verao) acho que é isso…

Obrigado novamente…me parece que o que voce disse procede. Dei uma olhada aqui na configuração de data/hora da máquina e ele está usando GMT-03:00, que é o horário de Brasília…entao acho que é correto usar esse valor.

De qualquer forma, o que fiz foi o seguinte…criei uma classe que extende DateTimeConverter e registrei essa classa no faces-config.xml como um converter…e no construtor desse cara eu defino o timezone com o retorno de TimeZone.getDefault(). Espero que não seja uma gambiarra muito feia :lol:

Obrigado pela ajuda Requena, e a todos que visitaram o tópico.

Olá amigos,

Seguindo as recomendações, mencionadas acima, ainda não obtive sucesso na inclusão da data. A mesma é incluida com 1 dia a menos.

Então, gostaria de perguntar qual o tipo de campo para o banco? (no caso, estou usando o tipo Date)

E qual o tipo da classe para a data no java.

Agradeço.

Resolvi o problema utilizando: timeZone=“UTC-3”.

Apenas registrando que é possivel resolver setando no web.xml:

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE true

[quote=ronaldocwb]Apenas registrando que é possivel resolver setando no web.xml:

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE true [/quote]

Resolveu o meu problema, muito obrigado!