Fomatação de data com DATE no mysql

6 respostas
E

Olá galera,

Podem me ajudar em relação ajuste de data usando mysql?
Seguinte, o campo “data_entrada” do tipo (date) no mysql é formato yyyy-mm-dd.
Meu bean é assim:

import java.sql.Date;

public class Funcionario {

	private String cargo;
	private Integer codigo;
	private Date entrada;
	private String DataCadastroFormatado;
	
		
	public String getCargo() {
		return cargo;
	}
	public void setCargo(String cargo) {
		this.cargo = cargo;
	}
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public Date getEntrada() {
		return entrada;
	}
	public void setEntrada(Date entrada) {
		this.entrada = entrada;
	}
	public String getDataCadastroFormatado() {   
	    SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");  
	    DataCadastroFormatado = formato.format(getEntrada());
	    return DataCadastroFormatado;
	}
		
}

E uso JSP, na tela consultafuncionario.jsp faço assim:

<%
		List<Funcionario> funcionarios = (List<Funcionario>)request.getAttribute("funcionarios");
		for(Funcionario funcionario: funcionarios){
		%>
		<tr>
			<td><%=funcionario.getCodigo()%></td>
			<td><%=funcionario.getCargo()%></td>
			<td><%=funcionario.getDataCadastroFormatado()%></td>			
		</tr>

Na tela consultafuncionario.jsp aparece a data correta do jeito que o usuario tem que ver, ex. 03/04/2012 sendo no banco está 2012-04-03.
Bem minha dificuldade é como passar de string para Date na hora que salvo no banco ou para visualizar na tela atualizacadastro.jsp, dá erro, e tentei de diversas formas para retornar para Date.
Estou usando o java.sql.Date
Na atualiza cadastro estou fazendo assim mas dá erro:

<td><input id="entrada" name="entarda" value="${funcionario.DataCadastroFormatado}"></input></td>

Alguem tem um exemplo usando beans, jsp, para acertos de date usando o mysql, ou podem me dar dicas onde devo tentar consertar isto?

Obrigado.

6 Respostas

D
String dataTxt = "12/02/2013";
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");    
Date data = formato.parse(dataTxt);

ve se isso ajuda

E

Opa obrigado, mais não consegui, desisti e deixei no formatao yyyy-mm-dd na pagina atualizafuncionario.jsp, e na consultafuncionario.jsp usei

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");    
           return formato.format(getEntrada());

Até…

E

Galera, desisti naquele momento pois precisava desta parte funcionando.
Agora pelo menos funcionando voltei ao problema.

Acredito que seja na parte dos imports java.util.date e java.sql.date
veja este exemplo:

package teste;
import java.sql.Date;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class TesteConexãoDB {

	public static void main(String[] args) throws SQLException {
		Date agora= (Date) new java.util.Date();
		Date agorasql = null;
		System.out.println(agora); 
		SimpleDateFormat formata = new SimpleDateFormat("yyyy-MM-dd");
		String formatadaagora = formata.format(agora);
		System.out.println(formatadaagora); //aqui tenho a string 2013-04-05
		// so que queria voltar esta string formatadaagora para date pelo java.sql.date para inserir no banco.
		DateFormat formata2 = new SimpleDateFormat("yyyy-MM-dd");  
		try {
			agorasql = (Date) formata2.parse(formatadaagora); //aqui eu tenho erro
		} catch (ParseException e) {
			e.printStackTrace();
		}		
		ConexãoDB.obterConexao();
		System.out.println(ConexãoDB.status);
		Connection con = (Connection) ConexãoDB.obterConexao();
		Statement st = con.createStatement();
		String sqlup = "";		
		sqlup = "UPDATE `funcionario` SET `entrada` = '"+agorasql+"' WHERE `funcionario`.`codigo` =1";
		st.executeUpdate(sqlup);
		String sqlse = "";
		sqlse = "Select nome,entrada From funcionario where codigo=1";
		ResultSet rs = st.executeQuery(sqlse);
		if (rs.next()){
			String nome = rs.getString("nome");
			System.out.println(nome);
			Date entrada = rs.getDate("entrada");
			System.out.println(entrada);
			SimpleDateFormat dateFormat = new SimpleDateFormat( "dd/MM/yyyy");
			String convertedDate=dateFormat.format(entrada);
			System.out.println(convertedDate);
		}		
	}
}

E tenho o erro de

Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Ou seja como voltar as datas de forma que funcione para eu inserir num formato date.sql de volta ao banco?

Obrigado.

D

tenta assim

no lugar disso

agorasql = (Date) formata2.parse(formatadaagora);

fazer isso

agorasql = new Date(formata2.parse(formatadaagora).getTime());

exemplo:

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;


public class MainTeste {

	/**
	 * @param args
	 * @throws ParseException 
	 */
	public static void main(String[] args) throws ParseException {
		String dataTXT = "25/01/1983";
		
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		
		Date date = new Date(format.parse(dataTXT).getTime());
		
		System.out.println(date);
	}

}
D

so pra explica melhor

quando vc faz

format.parse(dataTXT) // o retorno do método é um java.util.Date

se vc fizer um cast de um java.util.Date para um java.sql.Date vc tera um ClassCastException

por que java.sql.Date é filha de java.util.Date

E

Show de bola!
Resolveu.
Já ia até te perguntar o porque, mas vc já até respondeu.

Danilo valeu mesmo.

Obrigado.

Criado 3 de abril de 2013
Ultima resposta 5 de abr. de 2013
Respostas 6
Participantes 2