Konvertierung des java.util.Date-Formats JJJJ-MM-TT in MM-TT-JJJJ

87

Ich habe eine java.util.Dateim Format yyyy-mm-dd. Ich möchte, dass es im Format istmm-dd-yyyy

Unten ist das Beispiel, das ich für diese Konvertierung ausprobiert habe:

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

Die Ausgabe, die ich erhalte, hat immer noch nicht das Format mm-dd-yyyy.

Bitte lassen Sie mich wissen, wie man ein java.util.Datevon yyyy-mm-ddbis formatiertmm-dd-yyyy

user182944
quelle
2
Was meinst du, wenn du sagst .. Ich habe ein java.util.Date im Format JJJJ-MM-TT?
Jayamohan
Dies bedeutet, dass das aktuelle Format in meinem Code für die Anzeige auf der Benutzeroberfläche lautet yyyy-mm-dd.
user182944
1
Bitte ändern Sie kleine mm in MM
Dilip D

Antworten:

156

Date ist ein Container für die Anzahl der Millisekunden seit der Unix-Epoche (00:00:00 UTC am 1. Januar 1970).

Es hat kein Konzept des Formats.

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

Ausgänge ...

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

Java 7-

Sie sollten den ThreeTen Backport verwenden

Ursprüngliche Antwort

Zum Beispiel...

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

Ausgänge ...

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

Keine der Formatierungen hat den zugrunde liegenden DateWert geändert . Dies ist der Zweck des DateFormatters

Mit zusätzlichem Beispiel aktualisiert

Nur für den Fall, dass das erste Beispiel keinen Sinn ergab ...

In diesem Beispiel werden zwei Formatierer verwendet, um dasselbe Datum zu formatieren. Ich verwende dann dieselben Formatierer, um die StringWerte zurück auf Dates zu analysieren . Die resultierende Analyse ändert nichts an der Art und Weise Date, wie der Wert gemeldet wird .

Date#toStringist nur ein Dump seines Inhalts. Sie können dies nicht ändern, aber Sie können das DateObjekt beliebig formatieren

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

Welche Ausgänge ...

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

Achten Sie auch auf die Formatmuster. Schauen Sie sich das genauer an SimpleDateFormat, um sicherzustellen, dass Sie nicht die falschen Muster verwenden;)

MadProgrammer
quelle
Tolle Antwort hat mir geholfen. Ich habe versucht, eine Befehlszeilen-Beispiel-App zum Testen von Formaten auszuführen (bevor ich sie in einer Android-Klasse verwendet habe) - konnte den benötigten Import nicht finden. Keine der bereitgestellten Antworten enthält Folgendes: import java.text.SimpleDateFormat;
Raddevus
34
SimpleDateFormat("MM-dd-yyyy");

anstatt

SimpleDateFormat("mm-dd-yyyy");

weil MM points Month,mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
neuer Benutzer
quelle
Abgesehen von dieser Änderung, muss ich noch eine andere Änderung an der obigen util-Methode vornehmen? Ich kann es nicht sofort testen und frage dies daher. Gibt es auch eine bessere Möglichkeit, das zu formatieren java.util.Date?
user182944
15

'M' (Großbuchstaben) steht für Monat & 'm' (Einfach) für Minuten

Ein Beispiel für Monate

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

Ein Beispiel für Minuten

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

tl; dr

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

Einzelheiten

Ich habe ein java.util.Date im Format JJJJ-MM-TT

Wie bereits erwähnt, hat die DateKlasse kein Format. Es hat eine Anzahl von Millisekunden seit Anfang 1970 in UTC. Ohne weitere Bedingungen.

java.time

Die anderen Antworten verwenden problematische alte alte Datums- und Uhrzeitklassen, die jetzt durch die Klassen java.time ersetzt werden.

Wenn Sie eine haben java.util.Date, konvertieren Sie in ein InstantObjekt. Die InstantKlasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).

Instant instant = myUtilDate.toInstant();

Zeitzone

Die anderen Antworten ignorieren das entscheidende Problem der Zeitzone. Das Bestimmen eines Datums erfordert eine Zeitzone. Für jeden Moment variiert das Datum weltweit je nach Zone. Ein paar Minuten nach Mitternacht in Paris ist Frankreich ein neuer Tag, während es in Montréal Québec noch „gestern“ ist.

Definieren Sie die Zeitzone, nach der Sie den Kontext für Ihre möchten Instant.

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

Wenden Sie die ZoneIdan, um eine zu erhalten ZonedDateTime.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Wenn Sie sich nur für das Datum ohne Tageszeit interessieren, extrahieren Sie a LocalDate.

LocalDate localDate = zdt.toLocalDate();

Rufen Sie einfach auf, um eine Zeichenfolge im Standardformat ISO 8601, JJJJ-MM-TT, zu generieren toString. Die java.time-Klassen verwenden standardmäßig die Standardformate, wenn Zeichenfolgen generiert / analysiert werden.

String output = localDate.toString();

2017-01-23

Wenn Sie ein MM-TT-JJJJ-Format wünschen, definieren Sie ein Formatierungsmuster.

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

Beachten Sie, dass bei den Formatierungsmustercodes zwischen Groß- und Kleinschreibung unterschieden wird. Der Code in der Frage wurde falsch verwendet mm(Minute der Stunde) und nicht MM(Monat des Jahres).

Verwenden Sie DateTimeFormatterzum Parsen dasselbe Objekt. Die java.time-Klassen sind threadsicher, sodass Sie dieses Objekt behalten und es auch über Threads hinweg wiederholt wiederverwenden können.

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

Über java.time

Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date, Calendar, & SimpleDateFormat.

Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .

Woher bekomme ich die java.time-Klassen?

Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval, YearWeek, YearQuarter, und mehr .

Basil Bourque
quelle
1

Es ist einfach, die folgenden Codes zu verwenden.

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);
Ujitha
quelle
(A) Dieser Code ignoriert das entscheidende Problem der Zeitzonen. (B) Dieser Code verwendet problematische alte Datums- / Zeitklassen, die seit Jahren alt sind. Vermeide sie. Unterstützt von den Klassen java.time.
Basil Bourque
1

Möglicherweise erhalten Sie Tag, Monat und Jahr und können diese verketten oder das unten angegebene MM-TT-JJJJ-Format verwenden.

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);
Fnizami
quelle
1

Bitte ändern Sie den kleinen "mm" -Monat in "MM", es wird funktionieren. Als Referenz finden Sie unten den Beispielcode.

        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);
Dilip D.
quelle