Converter String em Data ou?

11 respostas
snowblacksoul

Pessoal sei que tem diversos post a respeito, mas nao conseguir achar e está complicado aqui na empresa

estou pegando uma String e preciso trocar essa String para o formato correto ex

String a = “12-12-2011” eu preciso que fique assim String b = “2011-12-12”

Como posso fazer isso?
Qual a melhor maneira

Estou fazendo desse jeito mais está dando erro, alguém pode me ajudar por favor.

SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" ); //Para converter de String para Date: java.util.Date data = sdf.parse(dd); //converter de Date para String String data1 = sdf.format( data );

11 Respostas

MaYaRa_SaN

Como o SimpleDateFormat serve para converter tipos Date -> String ou String -> Date

no teu caso tu quer 2 string em formatos diferentes… já tentou ter dois sdf?

//o primeiro tem o padrao que será informado:
SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" );   
        //Para converter de String para Date:  
        java.util.Date data = sdf.parse(dd);   

// o segundo o padrao que voce quer como saida
SimpleDateFormat sdfs = new SimpleDateFormat( "yyyy-MM-dd" );   
        //converter de Date para String  
        String data1 = sdf2.format( data );
alanbrasil1984

meu caro amigo, vc quer converter pra usar para exibir na web?

snowblacksoul

Pessoa ao converter a data esta vindo assim “Thu Dec 22 00:00:00 BRST 2011”

eu preciso da data desse forma =“2011-12-12”

Eu ja pego uma string que tem esse formato = “12-12-2011” eu preciso passar pra esse formato “2011-12-12”

MaYaRa_SaN o que tinha me passado eu já tinha feito, porém está aparecendo o formato “Thu Dec 22 00:00:00 BRST 2011”

alanbrasil1984 é desktop

diego.sas

Bom dia.

Tenta brincando de subString… rsrs

public static String formataData(String dataOld)throws Exception{
		StringBuilder data = new StringBuilder();
		if((dataOld != null) && (!"".equals(dataOld))){
			if(dataOld.length() <10 ){
				throw new Exception("Inválido o tamanho da data!");
			}			
			data.append(dataOld.substring(6,dataOld.length()));	
			data.append("/");
			data.append(dataOld.substring(3,5));
			data.append("/");
			data.append(dataOld.substring(0,2));
		}
		else{
			throw new Exception("Data vazio!");
		}
		return data.toString();
	}

Abraços

MaYaRa_SaN

é que tem um pequeno detalhe…

se voce quer converter de String pra Date, o padrão que voce passa no construtor é o formato que a string foi digitada…

se voce quer converter de Date para String, o padrão que voce passa no construtor é o formato que a data será formatada…

como voce está trabalhando com interface gráfica, voce pode usar o jformattedtextfield e atribuir a mascara no campo.

:wink:

alanbrasil1984

tem n formas de fazer isso, te aconselho com milissegundos.

procura no google que vc achará o que eu to falando.

R

Caso vc já tenha a data do formato String “dd-MM-yyyy” e só queira converter para String “yyyy-MM-dd”, tenta fazer da seguinte forma

Date data = FormatToolKit.strToDate(dataStr, "dd-MM-yyyy"); //converter a sua data String para Date
				
String dia = FormatToolKit.dateToStr(data, "dd-MM-yyyy").substring(0, 2);
String mes = FormatToolKit.dateToStr(data, "dd-MM-yyyy").substring(3, 5);
String ano = FormatToolKit.dateToStr(data, "dd-MM-yyyy").substring(6, 10);
String dataFormatada = ano + "-" + mes +"-"+ dia;
pmlm
MaYaRa_SaN:
Como o SimpleDateFormat serve para converter tipos Date -> String ou String -> Date

no teu caso tu quer 2 string em formatos diferentes... já tentou ter dois sdf?

//o primeiro tem o padrao que será informado:
SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" );   
        //Para converter de String para Date:  
        java.util.Date data = sdf.parse(dd);   

// o segundo o padrao que voce quer como saida
SimpleDateFormat sdfs = new SimpleDateFormat( "yyyy-MM-dd" );   
        //converter de Date para String  
        String data1 = sdf2.format( data );

A solução para o teu problema é esta.
Se não está a funcionar é porque estás a fazer algo errado. Aposto que é imprimir o objecto Date. O Date não tem formato e vai sempre mostrar no formato "Thu Dec 22 00:00:00 BRST 2011". Para mostrar no formato que queres deves usar a String respectiva.

snowblacksoul:
String a = "12-12-2011" eu preciso que fique assim String b = "2011-12-12"
String a = "12-12-2011"; 
SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" );   
Date data = sdf.parse(a);   

SimpleDateFormat sdfs = new SimpleDateFormat( "yyyy-MM-dd" );   
String b = sdf2.format( data );  
System.out.println(b);  // vai imprimir 2011-12-12
quaresma

MaYaRa_SaN:
é que tem um pequeno detalhe…

se voce quer converter de String pra Date, o padrão que voce passa no construtor é o formato que a string foi digitada…

se voce quer converter de Date para String, o padrão que voce passa no construtor é o formato que a data será formatada…

como voce está trabalhando com interface gráfica, voce pode usar o jformattedtextfield e atribuir a mascara no campo.

;)

estava a alguns dias procurando referente a esse material, sua explicação é otima.

H
pmlm:
MaYaRa_SaN:
Como o SimpleDateFormat serve para converter tipos Date -> String ou String -> Date no teu caso tu quer 2 string em formatos diferentes... já tentou ter dois sdf?
//o primeiro tem o padrao que será informado:
SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" );   
        //Para converter de String para Date:  
        java.util.Date data = sdf.parse(dd);   

// o segundo o padrao que voce quer como saida
SimpleDateFormat sdfs = new SimpleDateFormat( "yyyy-MM-dd" );   
        //converter de Date para String  
        String data1 = sdf2.format( data );

A solução para o teu problema é esta.
Se não está a funcionar é porque estás a fazer algo errado. Aposto que é imprimir o objecto Date. O Date não tem formato e vai sempre mostrar no formato "Thu Dec 22 00:00:00 BRST 2011". Para mostrar no formato que queres deves usar a String respectiva.

String a = "12-12-2011"; 
SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" );   
Date data = sdf.parse(a);   

SimpleDateFormat sdfs = new SimpleDateFormat( "yyyy-MM-dd" );   
String b = sdf2.format( data );  
System.out.println(b);  // vai imprimir 2011-12-12

Era exatamente isso oq eu precisava!
Só loguei no site pra agradecer a todos pelas respostas principalmente à MaYaRa_SaN e ao pmlm que facilitou a minha compreensão
quando voltar eu posto o código que tava me causando erro de exceção

H

meu problema era passar uma data obtida de um jformattedtextfield no formato ##/##/#### para o Banco de Dados
com o auxílio dos colegas, fiz as seguintes alterações (validação e retorno de mensagem para usuário será implementada mais tarde):

//receber data de um JFormattedTextField:
String dataString = Comp.JFTF_DataConsulta.getText();
dataString = dataString.replaceAll("/", "-");

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
//não permitir data inválida:
sdf.setLenient(false);
//instanciar objeto a partir da classe Date:
java.util.Date DATA = null; //ou simplesmente Date DATA = null;
try {
    //converter string para date
    DATA = sdf.parse(dataString);
} catch (ParseException ex) {
    System.out.println("CATCH - Erro ao tentar converter string para data");
    Logger.getLogger(TelaAgendamento.class.getName()).log(Level.SEVERE, null, ex);
}
//obter milissegundos da variável DATA:
DATA = new java.sql.Date(DATA.getTime());
//instância da classe PreparedStatement passando valores para inserção no banco:
stmt.setDate(1, (java.sql.Date) DATA);
Criado 27 de dezembro de 2011
Ultima resposta 17 de out. de 2013
Respostas 11
Participantes 8