Formatando data para o padrão americano

Boa tarde.
Estou tentando passa a data digitada pelo usuário do formato brasileiro para o americano e nao esta sendo formatado ele retorna este formato:

run:
java.text.SimpleDateFormat@f67a0200
CONSTRUÍDO COM SUCESSO (tempo total: 14 segundos)

private void jbSalvarActionPerformed(java.awt.event.ActionEvent evt) {
// Salvar dados

    //Criando o objeto teste
    Testes obj = new Testes();

    obj.setDescricao(jtfDescricao.getText());

    try {
        
        SimpleDateFormat dataEUA = new SimpleDateFormat("yyyy-MM-dd");
        

        System.out.println(dataEUA);
        obj.setData(dataEUA.parse(jftData.getText()));
    } catch (ParseException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao converte" + ex);
    }

jftData.getText() tem a data em qual formato? Se for o brasileiro, como vc disse (ou seja, “dia/mês/ano”), não vai funcionar, porque no SimpleDateFormat você colocou “yyyy-MM-dd” (ou seja, “ano-mês-dia”).

entao é para pegar o formato brasileiro e colocalo no formato americano esta no formato dd-MM-yyyyy o jftData

Antes de tudo, você precisa entender uma coisa:

Datas não têm formato

Uma data é apenas um conceito, uma ideia: ela representa um ponto específico no calendário.

Por exemplo, a data de “15 de janeiro de 2020”, por exemplo, representa isso: o ponto específico do calendário que corresponde ao dia 15 do mês de janeiro do ano de 2020. Para expressar essa ideia em forma de texto, eu posso escrevê-la de diferentes formas:

  • 15/01/2020 (um formato bem comum em muitos países, incluindo o Brasil)
  • 1/15/2020 (formato americano, invertendo o dia e mês)
  • 2020-01-15 (o formato [ISO 8601][3])
  • Quinze de Janeiro de 2020 (em bom português)
  • January 15th, 2020 (em inglês)
  • 2020年1月15日 (em japonês)
  • e muitos outros…

Repare que cada um dos formatos acima é diferente, mas todos representam a mesma data (os mesmos valores numéricos do dia, mês e ano).

Em Java, uma data é representada por java.util.Date (e a partir do Java 8, por java.time.LocalDate), e os formatos (os textos que representam a data) são String's.

Se a data está em um formato e você quer transformar em outro, então na verdade você tem uma String que representa a data em um formato. Por isso, primeiro você tem que transformar esta string em data, e depois converter esta data para outra String, no outro formato.

Para transformar uma String em data, você faz um parsing, e para transformar esta data em outra String, você faz uma formatação. E como os formatos são diferentes, você precisa de 2 SimpleDateFormat:

SimpleDateFormat formatoBr = new SimpleDateFormat("dd-MM-yyyy");
SimpleDateFormat formatoEua = new SimpleDateFormat("MM-dd-yyyy");

String strFormatoBr = "20-10-2020";
// faz o parsing da string em formato brasileiro, obtendo a data
Date data = formatoBr.parse(strFormatoBr);
// converte a data para String em formato americano
String strFormatoEua = formatoEua.format(data);
System.out.println(strFormatoEua); // 10-20-02020

Se estiver usando Java >= 8, outra opção é usar a API java.time:

DateTimeFormatter formatoBr = DateTimeFormatter.ofPattern("dd-MM-uuuu");
DateTimeFormatter formatoEua = DateTimeFormatter.ofPattern("MM-dd-uuuu");

String strFormatoBr = "20-10-2020";
// faz o parsing da string em formato brasileiro, obtendo a data
LocalDate data = LocalDate.parse(strFormatoBr, formatoBr);
// converte a data para String em formato americano
String strFormatoEua = formatoEua.format(data);
System.out.println(strFormatoEua); // 10-20-2020
1 curtida

muito obrigado pela ajuda, resolveu muito meu pro…