Erro na conversão de data?

9 respostas
fernandopaiva

Salve galera

Seguinte, estou tentando converter uma data de dia/mes/ano para ano-mes-dia…Bem, ja li muito, pesquisei aqui no forum e outros forums e os exemplos são na maioria das vezes o mesmo, o mesmo jeitão de converter.
Problema é que eu ainda não estou conseguindo.

vejam meu cõdigo.

public void converteData() throws ParseException{
        String dataDMY = "8/11/2010";
        SimpleDateFormat formata = new SimpleDateFormat("yyyy-mm-dd");
        Date date;
        date = formata.parse(dataDMY);
        System.out.println(date);
    }

o erro retornado é:

[error]
08/11/2010 11:37:12 vendas.VendaDeProduto confirmaVendaActionPerformed
SEVERE: null
java.text.ParseException: Unparseable date: “8/10/2010”
[/error]

alguma sugestão ???

9 Respostas

Eric_Yuzo

O pattern passado para o SimpleDateFormat é o que dita o formato da String recebida pelo método parse. portanto ele deve bater com o formato que você está passando (d/MM/yyyy)

fernandopaiva

Eric…Mas como eu faço para minha data ficar como 08/11/2010 ??? acabei de dar uma olhada nas opções do sistema operacional e ver que ela esta formatada para ser exibida assim, mas na aplicação java eu não consigo fazer com que ela seja exibida dessa forma…E ainda não consigo converte-la para yyyy-mm-dd.

obrigado.

Eric_Yuzo

Não entendi direito o que você está querendo fazer.

Esses formatos de data são Strings comuns, quando é feito um parse, a String é convertida em um objeto Date, que não possui um formato em específico, apenas atributos que guardam o dia, mês, etc. O formato passado no construtor do SimpleDateFormat serve para dizer como deve ser feita a conversão entre os tipos (String/Date).

Você precisa exibir a data no formato yyyy-MM-dd? Precisa desta data para salvar em um BD? Qual o objetivo da conversão.

D

Velho pode ver se isto te ajuda
apenas um exemplo longo

String data = 08/11/2010;

SimpleDateFormar sdf = new SimpleDateFormar(yyyy-MM-dd);

Sysout(sdf.format(new Date(data)));
FabioQuintana

fernandopaiva

diegorc85, obrigado pela dica…resolveu um dos meus problemas.

Meu problema agora é que quando eu exibo por exemplo o dia “8”, ele não me retorna o dia como “08”…Como eu faço para adicionar o 0zero na frente do meu dia ???

vejam minha classe Data.

public class Data {
    private int dia, mes, ano;

    public void setDataSis(){
        //seta data sistema
        GregorianCalendar calendario = new GregorianCalendar();
        dia = calendario.get(calendario.DAY_OF_MONTH);
        mes = calendario.get(calendario.MONTH) + 1;
        ano = calendario.get(calendario.YEAR);        
    }

    public String getDataSis() throws ParseException{
        //retorna a data do sistema
        //aqui ta o erro, eu quero que exiba 08/11/2010 e ta exibindo 8/11/2010
        String dataSis = String.valueOf(dia + "/" + mes + "/" + ano);
        return dataSis;
    }    

    public void formataDataBD() throws ParseException{
        String data = getDataSis();
        SimpleDateFormat formata = new SimpleDateFormat("yyyy-MM-dd", new Locale("pt_BR"));
        System.out.println(formata.format(new Date(data)));
    }

O erro esta no metodo getDataSis(),eu preciso exibir 08 e naum 8…

obrigado.

D

Cara coloca mais ou menos assim.
Pega com substring a posição do dia e da um .length(). Pois com isto vc terá a quantidade de posições no dia.
Caso tenha 1 posição vc concatena 0 se tiver 2 posições deixa passar de boa.

dataSis.substring(0,2).length();

Eric_Yuzo

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); //dd indica o dia com dois dígitos String data = df.format(new Date()); //formata a data de hoje

fernandopaiva

Eric…kkkk, com sua dica eu matei 2 coelhos de uma vez só…kkkk !

obrigado a todos RESOLVIDO.

Criado 8 de novembro de 2010
Ultima resposta 8 de nov. de 2010
Respostas 9
Participantes 4