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
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).
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 Date
s. 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;)
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);
'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
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.
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.
- Muito de hipoteca.a funcionalidade de tempo é portada de volta para Java 6 & 7 em Porto Triplo.
- a ThreeTenABP project adapts ThreeTen-Backport (mencionado acima) para Android especificamente.
- ver como utilizar ThreeTenABP....
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.
**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);**
É 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);