Conversione del formato java.util.Date aaaa-mm-gg in mm-gg-aaaa


89

Ho un java.util.Datenel formato yyyy-mm-dd. Voglio che sia nel formatomm-dd-yyyy

Di seguito è riportato l'utilità di esempio che ho provato per questa conversione:

// 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);

Tuttavia, l'output che ricevo non è nel formato mm-dd-yyyy.

Fammi sapere come formattare un file java.util.Dateda yyyy-mm-ddamm-dd-yyyy


2
Cosa intendi quando dici .. Ho un java.util.Date nel formato aaaa-mm-gg?
Jayamohan

Significa che il formato presente nel mio codice per visualizzarlo nell'interfaccia utente è yyyy-mm-dd.
user182944

1
si prega di modificare il piccolo mm in MM
Dilip D

Risposte:


158

Date è un contenitore per il numero di millisecondi dall'epoca Unix (00:00:00 UTC del 1 gennaio 1970).

Non ha il concetto di 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);

Uscite ...

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

Java 7-

Dovresti usare il ThreeTen Backport

Risposta originale

Per esempio...

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);

Uscite ...

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

Nessuna delle formattazioni ha modificato il Datevalore sottostante . Questo è lo scopo di DateFormatters

Aggiornato con ulteriore esempio

Nel caso in cui il primo esempio non avesse senso ...

Questo esempio utilizza due formattatori per formattare la stessa data. Quindi uso questi stessi formattatori per analizzare i Stringvalori in Dates. L'analisi risultante non altera il modo in cui Datesegnala il suo valore.

Date#toStringè solo una discarica dei suoi contenuti. Non puoi modificarlo, ma puoi formattare l' Dateoggetto come preferisci

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();
}

Quali uscite ...

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

Inoltre, fai attenzione ai modelli di formato. Dai un'occhiata più da vicino SimpleDateFormatper assicurarti di non utilizzare i modelli sbagliati;)


La grande risposta mi ha aiutato. Stavo cercando di eseguire un'app di esempio della riga di comando per testare i formati (prima di utilizzarla in una classe Android): non sono riuscito a trovare l'importazione di cui avevo bisogno. Nessuna delle risposte fornite ricorda di includere: import java.text.SimpleDateFormat;
raddevus

34
SimpleDateFormat("MM-dd-yyyy");

invece di

SimpleDateFormat("mm-dd-yyyy");

perché MM points Month,mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);

Oltre a questa modifica, è necessario apportare altre modifiche al metodo util sopra? Non sono in grado di provarlo subito, quindi chiedo questo. Inoltre, esiste un modo migliore per formattare il java.util.Date?
user182944

15

"M" (maiuscolo) rappresenta il mese e "m" (semplice) rappresentano i minuti

Qualche esempio per mesi

'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)

Qualche esempio per minuti

'm' -> 3  (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19

3

tl; dr

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

Dettagli

Ho un java.util.Date nel formato aaaa-mm-gg

Come altri accennato, la Dateclasse non ha formato. Ha un conteggio di millisecondi dall'inizio del 1970 in UTC. Senza obblighi.

java.time

Le altre Risposte utilizzano vecchie e problematiche classi data-ora legacy, ora soppiantate dalle classi java.time.

Se hai un java.util.Date, converti in un Instantoggetto. La Instantclasse rappresenta un momento sulla sequenza temporale in UTC con una risoluzione di nanosecondi (fino a nove (9) cifre di una frazione decimale).

Instant instant = myUtilDate.toInstant();

Fuso orario

Le altre risposte ignorano la questione cruciale del fuso orario. La determinazione di una data richiede un fuso orario. Per ogni momento, la data varia in tutto il mondo in base alla zona. Pochi minuti dopo la mezzanotte a Parigi Francia è un nuovo giorno, mentre ancora “ieri” a Montréal Québec.

Definisci il fuso orario in base al quale desideri il contesto per il tuo Instant.

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

Applicare ZoneIdper ottenere un file ZonedDateTime.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Se ti interessa solo la data senza l'ora del giorno, estrai un file LocalDate.

LocalDate localDate = zdt.toLocalDate();

Per generare una stringa nel formato standard ISO 8601, AAAA-MM-GG, è sufficiente chiamare toString. Le classi java.time utilizzano i formati standard per impostazione predefinita durante la generazione / analisi delle stringhe.

String output = localDate.toString();

2017-01-23

Se desideri un formato MM-GG-AAAA, definisci un modello di formattazione.

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

Tieni presente che i codici del modello di formattazione fanno distinzione tra maiuscole e minuscole. Il codice nella domanda utilizzato in modo errato mm(minuto dell'ora) anziché MM(mese dell'anno).

Usa lo stesso DateTimeFormatteroggetto per l'analisi. Le classi java.time sono thread-safe, quindi puoi tenere questo oggetto in giro e riutilizzarlo ripetutamente anche attraverso i thread.

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

Informazioni su java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date, Calendar, e SimpleDateFormat.

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, vedere il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval, YearWeek, YearQuartere altro .


1

È semplice da usare sotto i codici.

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);

(A) Questo codice ignora la questione cruciale dei fusi orari. (B) Questo codice utilizza vecchie classi data-ora fastidiose che sono state ereditate da anni ormai. Evitali. Soppiantato dalle classi java.time.
Basil Bourque

1

È possibile ottenere giorno, mese e anno e concatenarli o utilizzare il formato MM-gg-aaaa come indicato di seguito.

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);

1

Si prega di modificare il piccolo "mm" mese in maiuscolo "MM" funzionerà. Di seguito è riportato il codice di esempio.

        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);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.