[RESOLVIDO] Formatar Data e Hora que vem do BD

8 respostas
L

Boa tarde pessoal.

Eu tenho um campo no BD MySQL do tipo DateTime e quero recuperar a data e a hora.
Segue abaixo meu código.

Data Access Objetic - DAO

public List<Postagens> getLista() throws SQLException {

		String sql = " SELECT  p.titulo,	   				"  
				   + " 		   p.codigo,  	   				"
				   + "		   p.dt_postagem   				"
				   + "   FROM isabelaf_blog.postagens p 	"
				   + " ORDER BY p.dt_postagem desc  		";

		try {
			List<Postagens> listaParaEditar = new ArrayList<Postagens>();
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(sql);

			while (rs.next()) {
				Postagens postagem = new Postagens();
				postagem.setCodigo(rs.getLong("codigo"));
				postagem.setTitulo(rs.getString("titulo"));

				 Calendar data = Calendar.getInstance();
				 data.setTime(rs.getDate("dt_postagem"));
				 postagem.setDtPostagem(data);

				listaParaEditar.add(postagem);
			}

			rs.close();
			st.close();

			return listaParaEditar;

		} catch (SQLException e) {
			throw new RuntimeException(
					"Erro ao listar ==> ListaPostagensParaEditarDAO.java", e);
		} finally {
			con.close();
		}
	}

JavaBean

public class Postagens {

	private long codigo;
	private long codQuemPostou;
	private String titulo;
	private String textoPostagem;
	private Calendar dtPostagem;
       
       //Getters e setter.

Em certo momento eu apresento a data da seguinte forma

<div style="margin-left: 16px;">
						<FONT COLOR="gray" size=2> Postado em: ${postagem.dtPostagem.time} </FONT>
					&lt;/div&gt;

Alguém sabe como recupero essa data com formato dd/MM/yyyy HH:mm:ss ?

8 Respostas

diego.sas

No seu Bean dtPostagem, cria um método

public String getTimeFormatado(){
//Neste ponto utiliza um SimpleDateFormat com a mascara requerida e retorna a String formatada com a mask
}

No jsp fica

<div style="margin-left: 16px;">   
                        <FONT COLOR="gray" size=2> Postado em: ${postagem.dtPostagem.timeFormatado} </FONT>   
                    </div>
fbl.lucas

isso é servlet + jsp? Você esta utilizando JSTL?
Caso sim, tente utilizar a taglib:

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>

Segue exemplo http://www.java2s.com/Code/Java/JSTL/DateFormatinginJSTL.htm

Fabiano_Abreu

Olá lincolnti,

Você pode converter a data para string no próprio banco de dados, veja como em:

Espero ter lhe sido útil, abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

RafaelCassau

Segue abaixo exemplo básico de uso da Classe SimpleDateFormat

import java.text.SimpleDateFormat;
import java.util.Date;

public class teste {

	public static void main(String args[]){
		System.out.println(new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(new Date()));  
	}
}

espero ter ajudado.

Aldeir

Fazer o código SQL no braço é coisa do passado em primeiro lugar, e também você acaba enfrentando esse tipo de problema que é os diferentes tipos de dados. Dessa forma o resultado obtido do banco de dados acaba vindo como STRING e voce precisa fazer a conversão de tipos, ou seja, retrabalho. Acho melhor você utilizar hibernate que praticamente exclui os comandos e também s problemas com tipos de dados.

drsmachado

Hibernate nem sempre é uma solução viável ou possível.
Aliás, é melhor ele aprender adequadamente a manipular essa estrutura e então partir para ORM.
Depois, hibernate ainda pegaria a data como Date.

L

Obrigado a todos que colaboraram. A forma que encontrei foi a seguinte:

Alterei minha variável:

private Calendar dtPostagem;

para:

private String dataPostagem;

ou seja, alterei ela de Calendar para String. Fiz isso porque na hora de chamar o método format da classe SimpleDateFormat, ele só formata variável String,
se fizer a conversão para Date depois eu perco a formatação.

E criei um método no meu JavaBean:

//Método para formatar data. public String formataData(String data, String formato) { SimpleDateFormat formatoEntrada = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatoSaidaDtCompleta = new SimpleDateFormat("dd/MM/yyyy 'à(s)' HH:mm:ss"); SimpleDateFormat formatoSaidaDiaMesAno = new SimpleDateFormat("dd/MM/yyyy"); Date dataTypeDate = null; String resultado = null; try { dataTypeDate = formatoEntrada.parse(data); if ("dataCompleta".equals(formato)){ resultado = formatoSaidaDtCompleta.format(dataTypeDate); } else if ("diaMesAno".equals(formato)){ resultado = formatoSaidaDiaMesAno.format(dataTypeDate); } } catch (Exception e) { e.printStackTrace(); } return resultado; }

Este método recebe um parâmetro que diz o formato da data, no meu caso eu estou trabalhando com “dd/MM/yyyy” e “dd/MM/yyyy HH:mm:ss”.
Por isso o método faz apenas duas validações.

e no meu DAO, eu chamo o método da seguinte forma:

String dataBd = rs.getString("dt_postagem"); try { postagem.setDataPostagem(postagem.formataData(dataBd, "diaMesAno")); } catch (Exception e) { e.printStackTrace(); }

e no jsp eu apresento a data assim:

&lt;div style="margin-left: 16px;"&gt; <FONT COLOR="gray" size=2> Postado em: ${postagem.dataPostagem} </FONT> &lt;/div&gt;

Espero que essa solução possa ajudar alguém, se alguém tiver uma solução melhor será muito bem vinda. Muito obrigado a todos.

RafaelCassau

Boa noite lincolnti caso seu problema tenha sido solucionado, por favor altere o titulo do topico para [RESOLVIDO], e meu caro Aldeir realmente o Hibernate ou JPA, é uma excelente ferramenta, mas não tenha em mente que SQL é coisa do passado, pois o hibernate nos facilita e muito referente ao CRUD, mas existem muitas consultas especificas que precisam ser feitas ou em SQL ou em HQL (Hibernate Query Language), temos também o Criteria, que poderia sanar o uso so SQL ou HQL, mas a classe ainda possui algumas incopatibilidades.

E lembre-se SQL é sim primordial para um programador e não é e nunca será coisa do passado, pois tem muitos sistemas antigos e muitas tecnologias que ainda não possuem frameworks de persistencia.

Criado 26 de dezembro de 2011
Ultima resposta 28 de dez. de 2011
Respostas 8
Participantes 7