Ich habe eine java.util.Date
im 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.Date
von yyyy-mm-dd
bis formatiertmm-dd-yyyy
java
date
date-format
user182944
quelle
quelle
yyyy-mm-dd
.Antworten:
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
Date
Wert geändert . Dies ist der Zweck desDateFormatter
sMit 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
String
Werte zurück aufDate
s zu analysieren . Die resultierende Analyse ändert nichts an der Art und WeiseDate
, wie der Wert gemeldet wird .Date#toString
ist nur ein Dump seines Inhalts. Sie können dies nicht ändern, aber Sie können dasDate
Objekt beliebig formatierentry { 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;)quelle
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);
quelle
java.util.Date
?'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
quelle
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Einzelheiten
Wie bereits erwähnt, hat die
Date
Klasse 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 einInstant
Objekt. DieInstant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).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
ZoneId
an, um eine zu erhaltenZonedDateTime
.LocalDate
Wenn Sie sich nur für das Datum ohne Tageszeit interessieren, extrahieren Sie a
LocalDate
.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.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 nichtMM
(Monat des Jahres).Verwenden Sie
DateTimeFormatter
zum 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 .quelle
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);
quelle
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);
quelle
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);
quelle
siehe diese ..
Formatierungsdatum
DateTimeFormatter
Analysedatum
Sofort mit Zone
quelle