[RESOLVIDO] Quando eu converto a data dá uma diferença de um dia

Bom dia,

O meu problema é simples, porém não encontrei em nenhum lugar a solução.
Tem uma tela que recebe uma data, eu faço uma consulta no banco com essa data, porém quando eu imprimo o SQL da consulta na tela, dá uma diferença de um dia.
Ex:
Se eu digitei na página WEB 20/09/2012, quando vai para a minha consulta sai 19/09/2012.

Segue o código da página e da conversão da data:

PÁGINA WEB

						<h:outputText value="Data" />
						<h:inputText style="width:100px"
							value="#{despesaLancamento.despesaLancamento.data}"
							onchange="submit()"
							valueChangeListener="#{despesaLancamento.buscaRDV}">
							<f:convertDateTime pattern="dd/MM/yyyy" />
						</h:inputText>

CÓDIGO JAVA

		String dataF = new SimpleDateFormat("dd-MM-yyyy").format(data);

		ResultSet result = con
				.consultar("select * from RDV_Tipo WHERE dataInicial <= '"
						+ dataF + "' and dataFinal >= '" + dataF + "'");

Obrigado.

Por que você quer usar String pra fazer o SQL?

Java possui ferramentas pra você usar diretamente o Date, assim você evita esses problemas.

Use PreparedStatement para fazer consultas SQL, do jeito que sua consulta está você está vulnerável a SQL Injections

Sim, eu concordo com você, mas independente da maneira como eu vou gravar, quando eu quero saber o valor que a variável possui está dando um dia de diferença.

Por exemplo, tem uma outra parte do código que eu exibo uma mensagem para o usuário caso a data digitada não esteja no intervalo correto.

			Mensagem.Erro(
					"NENHUM RDV FOI ENCONTRADO COM ESSA DATA '"
							+ new SimpleDateFormat("dd/MM/yyyy")
									.format(despesaLancamento.getData()),
					"DIGITE A DATA");

Nesse trecho de código acontece o mesmo erro, se eu digito na Página WEB 20/09/2012, a mensagem que é retornada para o usuário é :

NENHUM RDV FOI ENCONTRADO COM ESSA DATA ‘19/09/2012’

Na classe java…

import java.util.Date;

private Date data_desejada;
<h:outputLabel value="Dia de Ocorrência da Omissão" for="diaOcOmss" />
				<p:calendar id="diaOcOmss" required="true" effect="explode"
					pattern="dd/MM/yyyy"
					requiredMessage="Selecione o dia de ocorrência da Omissão."
					value="#{omissaoBean.omissao.data_ocor_omissao}" />

Utilizo assim, e não da erro nenhum…
Muito simples, nem precisa de conversão…

Eu já usei Prime e nunca tive problemas também, só que nesse projeto eu tenho que usar JSF puro, será que ninguém passou por esse problema.

É muito estranho ele voltar a data, nunca tinha visto isso antes.

Obrigado

entendi…vou da uma olhada…qualquer posto aki…abraçuuu

Eu já :wink:
Isto ocorre por problema de TimeZone e Daylight Saving Time (horário de verão). Dependendo do caso é só configurar o banco de dados e a JVM do servidor com a mesma configuração.

Vlw, você podia me dizer como eu poderia configurar o TimeZone?

Consegui resolver o problema,

tem duas maneiras de corrigir o TimeZone

  1. NA HORA DE CONVERTER A DATA COLOCAR O TIMEZONE CORRETO
<f:convertDateTime locale="BR" timeZone="America/Sao_Paulo" pattern=" dd/MM/yyyy HH:mm"/>	
  1. NO ARQUIVO WEB.XML INCLUIR A CONFIGURAÇÃO PARA BUSCAR O TIMEZONE DA MAQUINA
	<context-param>  
  		<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>  
  		<param-value>true</param-value>  
	</context-param>

Obrado pela ajuda de vocês.