Problema com Primefaces Calendar

Estou com um problema com o Calendar do PrimeFaces e consegui utiliza-lo e configurar ele para o idioma português, mas, o problema é que escolho a data para salvar 21/04/2017 ai ele salva a data 20/04/2017, ou seja, sempre um dia a menos.

Então coloquei o código antes de salvar:

 Calendar calendar = Calendar.getInstance();
 calendar.setTime(vData);
 calendar.add(Calendar.DATE, 1);
 cliente.setDatacad(calendar.getTime());

Beleza achava que estava resolvido, mas agora percebi que se eu abri o cadastro novamente e fazer alguma alteração e mesmo não mudando a data. Ele joga a data um dia pra frente ficando 22/04/2017 - 23/04/2017.

Estou utilizando o MERGE para salvar e alterar.

Como posso resolver isso?

Cara posta o código ai do componente calendar para a gente ver… Tem algum motivo especial em você estar usando o tipo Calendar? Talvez o tipo Date do java.util pudesse ser melhor.

Olá

Qual código você fala? Porque eu postei o código ai onde recupero do formulário a data e acrescento um dia.

Como ficaria esse código ai com o Date do java.util?

Alex, falo o código da view mesmo onde você usa o p:calendar…

O código com o Date ficaria assim:

Date data = new Date();
cliente.setDatacad(data); * Lembrar de mudar o tipo do atributo “datacad” na classe Cliente também…

Olá

Estou usando assim:

<p:calendar id="data" styleClass="txtdata" mask="99/99/9999"
 		maxlength="10" navigator="true" yearRange="c-99:c+10"
 		value="#{bancolancamentosBean.vData}" required="true"
 		requiredMessage="Digite a data do lançamento" size="8"
 		locale="pt_BR" pattern="dd/MM/yyyy">
 		<f:convertDateTime type="date" pattern="dd/MM/yyyy" />
</p:calendar>

E no Bean na hora de salvar assim:

public void fnSalvar() {
		try {

			Calendar calendar = Calendar.getInstance();
			calendar.setTime(vData);
			calendar.add(Calendar.DATE, 1);
			bancolancamento.setData(calendar.getTime());

			bancolancamento.setValor(vValor);
			bancolancamento.setIdempresa(clsIdEmpresa.getEmpresa());

			bancolancamentosDAO.merge(bancolancamento);

			fnNovo();
			fnListar();

			fnMensagem("Operação realizada com sucesso", "info");

		} catch (RuntimeException erro) {
			fnMensagem("Erro ao salvar lançamento " + erro, "erro");
			erro.printStackTrace();
		}
	}

Coloquei esse código de adicionar 1 dia do calendar por uma dica de resolver o problema, porque se retiro sempre salva com 1 dia anterior. Se coloco no campo 25/04/2017 ele salva 24/04/2017.
Onde peguei essa dica disse que é por causa do fuso horário.

1 curtida

Ao meu ver, não há nada de errado no código, se atente a data que está inserida no seu servidor local, pode ser que ela esteja errada e isso está refletindo no seu sistema.
Outra forma seria você usar a data direto no código SQL, com o current_date() ou adicionar essa premissa no seu BD

Ainda não publiquei o sistema, estou rodando na minha máquina com Tomcat.

Essas outras opções que você falou não entendi.

Em relação ao código, o problema só acontece quando preciso fazer uma alteração no registro. Ele esta sempre adicionando 1 dia a data.