hipoteca.util.Data format conversion AAAA-mm-dd to mm-dd-AAAA

tenho um java.util.Date no formato yyyy-mm-dd. Quero que seja no formato mm-dd-yyyy

abaixo está a amostra util que tentei para esta conversão:

// Setting the pattern
    SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
    // myDate is the java.util.Date in yyyy-mm-dd format
    // Converting it into String using formatter
    String strDate = sm.format(myDate);
    //Converting the String back to java.util.Date
    Date dt = sm.parse(strDate);

ainda assim a saída que estou a obter não está no formato mm-dd-yyyy.

Por Favor, diga-me como formatar a java.util.Date de yyyy-mm-dd para mm-dd-yyyy

Author: Eric Leschinski, 0000-00-00

6 answers

Date é um recipiente para o número de milisegundos desde a época Unix (00: 00: 00 UTC em 1 de janeiro de 1970).

Não tem conceito de formato.

Java 8+

LocalDateTime ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt));
System.out.println(ldt);

Saídas...

05-11-2018
2018-05-11
2018-05-11T17:24:42.980
Java 7 -

Devias estar a usar o Backport de três velocidades.

Resposta Original

Por exemplo...
Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);

Saídas...

Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013

Nenhuma da formatação alterou o valor subjacente Date. Isto é ... o objectivo do DateFormatter s

Actualizado com exemplo adicional

Só para o caso do primeiro exemplo não fazer sentido...

Este exemplo usa dois formatadores para formatar a mesma data. Eu então uso estes mesmos formatadores para processar os valores String de volta para Dates. O processamento resultante não altera a forma como Date relata o seu valor.

Date#toString é apenas uma lixeira do seu conteúdo. Você não pode mudar isso, mas você pode formatar o objeto Date de qualquer maneira que você tipo

try {
    Date myDate = new Date();
    System.out.println(myDate);

    SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
    SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");

    // Format the date to Strings
    String mdy = mdyFormat.format(myDate);
    String dmy = dmyFormat.format(myDate);

    // Results...
    System.out.println(mdy);
    System.out.println(dmy);
    // Parse the Strings back to dates
    // Note, the formats don't "stick" with the Date value
    System.out.println(mdyFormat.parse(mdy));
    System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
    exp.printStackTrace();
}

Que Saídas...

Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013

Também, tenha cuidado com os padrões de formato. Dê uma olhada mais de perto SimpleDateFormat para ter certeza de que você não está usando os padrões errados;)

 106
Author: MadProgrammer, 2018-05-11 07:25:21
SimpleDateFormat("MM-dd-yyyy");

Em vez de

SimpleDateFormat("mm-dd-yyyy");

Porque MM points Month, mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
 26
Author: newuser, 2013-08-28 06:31:44

'M' (Capital) representam o mês & ' m ' (simples) representam a acta

Algum exemplo para meses

'M' -> 7  (without prefix 0 if it is single digit)
'M' -> 12

'MM' -> 07 (with prefix 0 if it is single digit)
'MM' -> 12

'MMM' -> Jul (display with 3 character)

'MMMM' -> December (display with full name)

Um exemplo para minutos

'm' -> 3  (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19
 13
Author: darshakat, 2013-08-28 06:33:57

Tl; dr

LocalDate.parse( 
    "01-23-2017" , 
    DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)

Detalhes

Tenho um café.util.Data no formato AAAA-mm-dd

Como outros mencionados, a classe Date não tem formato. Tem uma contagem de milisegundos desde o início de 1970 em UTC. Sem compromissos.

Java.tempo

As outras respostas usam problemáticas velhas classes de data-hora legadas, agora suplantadas pelo java.aulas de tempo.

Se tiver um objecto java.util.Date, converta para um objecto Instant. O Instant classe representa um momento na linha do tempo em UTC com uma resolução de nanossegundos (até nove (9) dígitos de uma fração decimal).

Instant instant = myUtilDate.toInstant();

Fuso horário

As outras respostas ignoram a questão crucial do fuso horário. Determinar uma data requer um fuso horário. Para qualquer momento, a data varia ao redor do globo por zona. Poucos minutos depois da meia-noite em Paris, a França é um novo dia, enquanto ainda "ontem" em Montréal Quebec.

Define o fuso-horário pelo qual queres o contexto para o teu Instant.

ZoneId z = ZoneId.of( "America/Montreal" );

Aplica o ZoneId para obter um ZonedDateTime.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Se só te importas com a data sem uma hora do dia, extrai um LocalDate.

LocalDate localDate = zdt.toLocalDate();

Para gerar um texto no formato padrão ISO 8601, aaaa-MM-DD, basta chamar toString. Hipoteca.as classes de tempo usam os formatos padrão por omissão ao gerar/processar strings.

String output = localDate.toString();

2017-01-23

Se quiser um formato MM-DD-AAAA, defina um padrão de formatação.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );

Note que os códigos de padrão de formatação são sensíveis à capitalização. O código na pergunta utilizado incorrectamente mm (minuto de hora) em vez de MM (mês do ano).

Usar o mesmo objecto DateTimeFormatter para analisar. Hipoteca.as classes de tempo são thread-safe, então você pode manter este objeto em torno e reutilizá-lo repetidamente até mesmo através de threads.

LocalDate localDate = LocalDate.parse( "01-23-2017" , f );

Cerca de hipoteca.tempo

O java.o framework time é construído em Java 8 e mais tarde. Estas classes suplantam o antigo legado problemático classes de data-hora, tais como java.util.Date, Calendar, & SimpleDateFormat.

O projecto Joda-Time, agora em modo de manutenção, aconselha a migração para o java .hora das aulas.

Para saber mais, veja o TutorialOracle. E procurar o estouro da pilha por muitos exemplos e explicacao. A especificação é JSR 310 .

Onde obter o java.aulas de tempo?

  • Java SE 8 e SE 9 e, mais tarde,
      Embutido.
  • parte da API Java padrão com uma implementação agrupada.
  • Java 9 adiciona algumas funcionalidades e correcções menores.
  • Java SE 6 e SE 7
      Muito de hipoteca.a funcionalidade de tempo é portada de volta para Java 6 & 7 em Porto Triplo.
  • Andróide
  • A três-Extra O projeto estende java.tempo com aulas adicionais. Este projeto é um campo de testes para possíveis adições futuras a java.tempo. Você pode encontrar algumas classes úteis, tais como as Interval, YearWeek, YearQuarter, e mais.

     2
    Author: Basil Bourque, 2017-05-23 12:10:39
    Por favor, mude o mês "mm" pequeno para " MM " maiúsculo.para referência a seguir, indicar o código da amostra.
      **Date myDate = new Date();
        SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
    
        String strDate = sm.format(myDate);
    
        Date dt = sm.parse(strDate);
        System.out.println(strDate);**
    
     0
    Author: Dilip, 2017-03-22 18:00:25

    É simples usar abaixo dos códigos.

    final Date todayDate = new Date();
    
    System.out.println(todayDate);
    
    System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate));
    
    System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate));
    
    System.out.println(todayDate);
    
     0
    Author: Ujitha, 2017-11-15 11:35:18