2
respostas

Data de pagamento apresenta valor errado

Tanto o código que fiz, quanto do instrutor a data de pagamento aparece com um dia a menos (alterei para 05/05/2019 e aparece 04/05/2019). Segue os códigos:

JSP

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<meta charset="UTF-8">
<title>Mostrar Contas</title>
</head>
<body>
    <h3>Alterar Conta</h3>
    <form action="alteraConta" method="post">

        <div>Descrição: <br />
            <textarea name="descricao" rows="5" cols="100">${conta.descricao}</textarea>
        </div>

        <div>
            Valor: <br /> <input type="text" name="valor" value="${conta.valor}" />
        </div>

        <div>
            Tipo: <br /> 
            <select name="tipo">
                <option value="ENTRADA" ${conta.tipo=='ENTRADA' ? 'selected':''}>Entrada</option>
                <option value="SAIDA" ${conta.tipo=='SAIDA' ? 'selected':''}>Saída</option>
            </select>
        </div> 

        <div>
            Pago <br />
            <input type="checkbox" name="paga"    ${conta.paga?'checked':''} />
        </div>

        <div>
            Data de Pagamento: <br />
            <input type="text" name="dataPagamento"
                value="<fmt:formatDate value="${conta.dataPagamento.time}" 
                pattern="dd/MM/yyyy" />" />
        </div>

        <div>
            <input type="hidden" name="id" value="${conta.id}" /> 
            <input type="submit" value="Alterar" />
        </div>

    </form>
</body>
</html>

Controllers

    @RequestMapping("/mostraConta")
    public String mostrar(Long id, Model model) {
      ContaDAO dao = new ContaDAO();
      model.addAttribute("conta", dao.buscaPorId(id));

      return "conta/mostra";
    }

    @RequestMapping("/alteraConta")
    public String alterar(Conta conta) {
      ContaDAO dao = new ContaDAO();
      dao.altera(conta);
      return "redirect:listaContas";
    }

Conta

public class Conta {

    @DateTimeFormat(pattern="dd/MM/yyyy")
    private Calendar dataPagamento;

    public Calendar getDataPagamento() {
        return dataPagamento;
    }

    public void setDataPagamento(Calendar dataPagamento) {
        this.dataPagamento = dataPagamento;
    }

}
2 respostas

Oi amigo, tudo bem?

Me parece algum problema com o timezone da Data Pagamento.

Tenta setar o timezone na tag fmt:formatDate:

<c:set var="timeZone" value="GMT-3"/>
<fmt:timeZone value="${timezone}">
<fmt:formatDate value="${conta.dataPagamento.time}" pattern="dd/MM/yyyy" timeZone="${timezone}" />

Olá Otávio, tudo ótimo, obrigado. E com você?

Infelizmente o problema persiste mesmo com a adição do timezone.