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.