Converter String para Date

13 respostas
G

Boa tarde,

Estou fazendo um exercicio que é baseado em um cadastro basico , mas estou tendo problemas para converter String para Date.

Segue um trecho do código.

Este é parte do UsuarioUI.java

System.out.println("Incluir Usuario");
            System.out.println("=============");
            System.out.print("Digite o nome : ");
            usuarioDTO.setNome(Keyboard.readString());            
            System.out.print("Digite a data de nascimento : ");
            usuarioDTO.setDataNascimento(Keyboard.readString());
            System.out.print("Digite o salario : ");
            usuarioDTO.setSalario(Keyboard.readDouble());
            System.out.print("Digite o sexo : ");
            usuarioDTO.setSexo(Keyboard.readInt());
            System.out.print("Esta Ativo ? S ou N : ");
            usuarioDTO.setAtivo(Keyboard.readChar());
            System.out.print("Digite o cargo : ");
            usuarioDTO.setCargoDTO(Keyboard.readString());

            usuarioDAO.incluir( usuarioDTO );

este é parte do UsuarioDTO.java

public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

este é parte do UsuarioDAO.java

public void incluir(UsuarioDTO usuarioDTO) throws SQLException {

        String sql = "insert into usuario ( usuario_id, nome, dataNascimento, salario, sexo, ativo, cargo_id) values (null,?,?,?,?,?,?)";
        PreparedStatement pstmt = database.getConnection().prepareStatement(sql);
        pstmt.setString(1,  usuarioDTO.getNome());
        //pstmt.setDate(2, new java.sql.Date(usuarioDTO.getDataNascimento().getTime()));
        pstmt.setDate(2, Utilitario.convertDate()usuarioDTO.getDataNascimento());
        pstmt.setDouble(3,  usuarioDTO.getSalario());
        pstmt.setInt(4,  usuarioDTO.getSexo());
        pstmt.setString(5,  ""+usuarioDTO.getAtivo());
        pstmt.setInt(6,  usuarioDTO.getCargoDTO().getCargo_id());

        pstmt.executeUpdate();


    }

e este é parte do utilitario onde estão os metodos de conversão

public Date converte(String dataNasc) throws ParseException{
        DateFormat forma = new SimpleDateFormat("dd/MM/yyyy");
        java.sql.Date data = new java.sql.Date(forma.parse(dataNasc).getTime());
        
        return data;
    }
    
    public static String convertDate(Date date, String format) {
        if(date != null) {
            SimpleDateFormat sdf = format != null ? new SimpleDateFormat(format) : new SimpleDateFormat("dd/MM/yyyy");
            sdf.setLenient(false);
            return sdf.format(date);
        } else {
            return "";
        }
    }

    /**
     * Converte um string em uma data
     * @param String - string com uma data válida
     * @param String - formato da data na string
     * @return Date - data
     */
    public static Date convertDate(String date, String format)
    throws ParseException {
        if(date != null) {
            SimpleDateFormat sdf = format != null ? new SimpleDateFormat(format) : new SimpleDateFormat("dd/MM/yyyy");
            sdf.setLenient(false);
            return sdf.parse(date);
        } else {
            return null;
        }
    }

Pois bem na linha usuarioDTO.setDataNascimento(Keyboard.readString()); no Usuarioui.java esta dando o seguinte erro:

method setDataNascimento in class br.faetec.cadastro.model.dto.UsuarioDTO cannot be applied to given types;
required: java.util.Date
found: java.lang.String
reason: actual argument java.lang.String cannot be converted to java.util.Date by method invocation conversion

Se eu mudar o getDataNacimento do UsuarioDTO.java para String ai da erro no UsuarioDAO.java , será que eu estou esquecendo de algum detalhe ?

Sou iniciante em java , agradeço deswde já a atenção de vocês.

Abraço

13 Respostas

guilherme.dio

Utilize essa regra:

public Date transformaData(String data)
{
  SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy kk:hh:ss");
  try
  {
  	return formatador.parse(data);
  }
  catch(ParseException ex)
  { 
	  throw new RuntimeException(ex);
  }
}
drsmachado
System.out.print("Digite a data de nascimento : ");  
            usuarioDTO.setDataNascimento(Keyboard.readString());

Ao invés de colocar direto a data inserida pelo usuário, aqui você precisa chamar o método que transforma String em Date, no utilitário.

public Date converte(String dataNasc) throws ParseException{  
        DateFormat forma = new SimpleDateFormat("dd/MM/yyyy");  
        java.sql.Date data = new java.sql.Date(forma.parse(dataNasc).getTime());  
          
        return data;  
    }
G

guilerme.dio esta regra eu coloco no utilitario ?

G

drsmachado como e onde eu chamo o metodo ?

desculpe a ignorancia.

Obrigado

G

onde e como eu chamo o método ?

drsmachado

[xiita mode:on]
Sinceramente, desiste, não vai conseguir nunca.
[xiita mode:off]
Camarada, se você não sabe onde invocar um método, como quer desenvolver alguma coisa?
E não me venha com essa desculpinha esfarrapada de que é iniciante pois iniciante é aquele que está apredendo a usar if, else, for e não fazer interação com banco de dados.

Primeiro, o próprio stack de erro aponta onde você está errando. E se ele diz que você está passando String ao invés de Date para o método setDataNascimento, onde é que você vai chamar o método? No final da classe? Não né?

guilherme.dio

Altera isso:

System.out.print("Digite a data de nascimento : ");  
usuarioDTO.setDataNascimento(Keyboard.readString());

Por isso(Utilizando aquele método que citei acima):

System.out.print("Digite a data de nascimento : ");  
usuarioDTO.setDataNascimento(transformaData(Keyboard.readString()));
drsmachado

guilherme.dio:
Altera isso:

System.out.print("Digite a data de nascimento : ");  
usuarioDTO.setDataNascimento(Keyboard.readString());

Por isso(Utilizando aquele método que citei acima):

System.out.print("Digite a data de nascimento : "); usuarioDTO.setDataNascimento(transformaData(Keyboard.readString()));


Ele já possui um método para conversão no utilitário.
Basta que ele altere a linha adequada e não precisa inserir mais nada.

T

Amigo, você já tem todos os métodos de conversão prontos.

O que acontece é que você está passando uma STRING para um campo DATE:

System.out.print("Digite a data de nascimento : "); usuarioDTO.setDataNascimento(Keyboard.readString());

A solução é você pegar o valor digitado, converter para Date chamando um método de conversão que você já tem e passar a data formatada para o setDataNascimento. Consegue fazer isso?

Abs!

guilherme.dio

drsmachado:
guilherme.dio:
Altera isso:

System.out.print("Digite a data de nascimento : ");  
usuarioDTO.setDataNascimento(Keyboard.readString());

Por isso(Utilizando aquele método que citei acima):

System.out.print("Digite a data de nascimento : "); usuarioDTO.setDataNascimento(transformaData(Keyboard.readString()));


Ele já possui um método para conversão no utilitário.
Basta que ele altere a linha adequada e não precisa inserir mais nada.

Só dei um exemplo rápido para ele entender…

drsmachado

guilherme.dio:
drsmachado:
guilherme.dio:
Altera isso:

System.out.print("Digite a data de nascimento : ");  
usuarioDTO.setDataNascimento(Keyboard.readString());

Por isso(Utilizando aquele método que citei acima):

System.out.print("Digite a data de nascimento : "); usuarioDTO.setDataNascimento(transformaData(Keyboard.readString()));


Ele já possui um método para conversão no utilitário.
Basta que ele altere a linha adequada e não precisa inserir mais nada.

Só dei um exemplo rápido para ele entender…


Eu entendi tua atitude, mas sinto que não será suficiente.
Primeiro por que creio que estes códigos não foi ele que desenvolveu. Se fosse, teria achado o erro e corrigido.

G

Valeu Rapaziada deu certo aqui , coloquei o método dentro do UsuarioUi e chamei antes do keyboardReader.

Muito grato , fiquem com Deus

G

guilerme.dio valeu pela paciencia e pela clareza

Criado 8 de maio de 2012
Ultima resposta 8 de mai. de 2012
Respostas 13
Participantes 4