eu tenho um java.util.Date
no formato yyyy-mm-dd
. Eu quero que seja no formatomm-dd-yyyy
Abaixo está o utilitário de amostra que experimentei 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 recebendo não está no formato mm-dd-yyyy
.
Por favor, deixe-me saber como formatar um java.util.Date
de yyyy-mm-dd
paramm-dd-yyyy
java
date
date-format
user182944
fonte
fonte
yyyy-mm-dd
.Respostas:
Date
é um contêiner para o número de milissegundos desde a época do 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-
Você deve estar fazendo uso do Backport ThreeTen
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 das formatações alterou o
Date
valor subjacente . Este é o propósito doDateFormatter
sAtualizado com exemplo adicional
Para o caso de o primeiro exemplo não fazer sentido ...
Este exemplo usa dois formatadores para formatar a mesma data. Em seguida, uso esses mesmos formatadores para analisar os
String
valores de volta paraDate
s. A análise resultante não altera a maneira comoDate
relata seu valor.Date#toString
é apenas um despejo de seu conteúdo. Você não pode mudar isso, mas você pode formatar oDate
objeto da maneira que quisertry { 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(); }
Quais 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
Além disso, tome cuidado com os padrões de formato. Dê uma olhada mais de perto
SimpleDateFormat
para se certificar de que não está usando os padrões errados;)fonte
SimpleDateFormat("MM-dd-yyyy");
ao invés de
SimpleDateFormat("mm-dd-yyyy");
porque
MM points Month
,mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate);
fonte
java.util.Date
?'M' (maiúscula) representa o mês e 'm' (simples) representa os minutos
Algum exemplo por 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)
Alguns exemplos por 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
fonte
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Detalhes
Como outro mencionado, a
Date
aula não possui formato. Tem uma contagem de milissegundos desde o início de 1970 no UTC. Sem condições.java.time
As outras Respostas usam classes antigas e problemáticas de data e hora, agora suplantadas pelas classes java.time.
Se você tiver um
java.util.Date
, converta em umInstant
objeto. AInstant
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).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 Montreal Québec.
Defina o fuso horário pelo qual você deseja contexto para o seu
Instant
.ZoneId z = ZoneId.of( "America/Montreal" );
Aplique o
ZoneId
para obter umZonedDateTime
.LocalDate
Se você só se preocupa com a data sem uma hora do dia, extraia a
LocalDate
.Para gerar uma string no formato ISO 8601 padrão, AAAA-MM-DD, basta chamar
toString
. As classes java.time usam os formatos padrão por padrão ao gerar / analisar strings.Se você deseja um formato MM-DD-AAAA, defina um padrão de formatação.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ); String output = localDate.format( f );
Observe que os códigos de padrão de formatação diferenciam maiúsculas de minúsculas. O código na pergunta usado incorretamente
mm
(minuto da hora) em vez deMM
(mês do ano).Use o mesmo
DateTimeFormatter
objeto para análise. As classes java.time são thread-safe, portanto, você pode manter esse objeto por perto e reutilizá-lo repetidamente, mesmo entre threads.LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como
java.util.Date
,Calendar
, eSimpleDateFormat
.O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .
Para saber mais, consulte o tutorial Oracle . E pesquise no Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
É simples usar os códigos abaixo.
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);
fonte
Você pode obter dia, mês e ano e pode concatená-los ou pode usar o formato MM-dd-aaaa conforme fornecido abaixo.
Date date1 = new Date(); String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1); System.out.println("Formatted Date 1: " + mmddyyyy1); Date date2 = new Date(); Calendar calendar1 = new GregorianCalendar(); calendar1.setTime(date2); int day1 = calendar1.get(Calendar.DAY_OF_MONTH); int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11} int year1 = calendar1.get(Calendar.YEAR); String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1); System.out.println("Formatted Date 2: " + mmddyyyy2); LocalDateTime ldt1 = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy3 = ldt1.format(format1); System.out.println("Formatted Date 3: " + mmddyyyy3); LocalDateTime ldt2 = LocalDateTime.now(); int day2 = ldt2.getDayOfMonth(); int mont2= ldt2.getMonthValue(); int year2= ldt2.getYear(); String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2); System.out.println("Formatted Date 4: " + mmddyyyy4); LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy5 = ldt3.format(format2); System.out.println("Formatted Date 5: " + mmddyyyy5); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); int day3 = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE int month3= calendar2.get(Calendar.MONTH) + 1; int year3 = calendar2.get(Calendar.YEAR); String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3); System.out.println("Formatted Date 6: " + mmddyyyy6); Date date3 = new Date(); LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd int day4 = ld1.getDayOfMonth(); int month4= ld1.getMonthValue(); int year4 = ld1.getYear(); String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4); System.out.println("Formatted Date 7: " + mmddyyyy7); Date date4 = new Date(); int day5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth(); int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue(); int year5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear(); String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5); System.out.println("Formatted Date 8: " + mmddyyyy8); Date date5 = new Date(); int day6 = Integer.parseInt(new SimpleDateFormat("dd").format(date5)); int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5)); int year6 = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5)); String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here` System.out.println("Formatted Date 9: " + mmddyyyy9);
fonte
Altere o mês "mm" pequeno para "MM" maiúsculo. Isso funcionará. Para referência abaixo, está o código de exemplo.
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);
fonte
veja estes ..
data de formatação
DateTimeFormatter
data de análise
Instantâneo com zona
fonte