wake-up-neo.net

java.util.Date Formatkonvertierung JJJJ-MM-TT in MM-TT-JJJJ

Ich habe einen Java.util.Date Im Format yyyy-mm-dd. Ich möchte, dass es das Format mm-dd-yyyy Hat.

Nachfolgend finden Sie 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 ein Java.util.Date Von yyyy-mm-dd In mm-dd-yyyy Formatiert wird.

67
user182944

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

Es gibt kein Formatkonzept.

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 das 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 Wert Date geändert. Dies ist der Zweck der DateFormatters

Aktualisiert mit zusätzlichem Beispiel

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

In diesem Beispiel werden zwei Formatierer zum Formatieren desselben Datums verwendet. Ich verwende dann dieselben Formatierer, um die String -Werte zurück auf Dates zu analysieren. Die resultierende Analyse ändert nicht die Art und Weise, wie Date den Wert angibt.

Date#toString ist nur ein Dump seines Inhalts. Sie können dies nicht ändern, aber Sie können das Objekt Date so formatieren, wie Sie möchten

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 SimpleDateFormat genauer an, um sicherzustellen, dass Sie nicht die falschen Muster verwenden;)

134
MadProgrammer
SimpleDateFormat("MM-dd-yyyy");

anstatt von

SimpleDateFormat("mm-dd-yyyy");

da MM points Month, mm points minutes

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

'M' (Capital) steht für Monat und 'm' (Simple) 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
14
darshakat

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 Klasse Date kein Format. Es zählt seit Anfang 1970 in UTC Millisekunden. Ohne weitere Bedingungen.

Java.time

Die anderen Antworten verwenden lästige alte Datums-/Uhrzeitklassen, die jetzt durch die Java.time-Klassen ersetzt werden.

Wenn Sie einen Java.util.Date Haben, konvertieren Sie in ein Instant Objekt. Die Klasse Instant 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 rund um den Globus je nach Zone. Wenige 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 Ihr Instant definieren möchten.

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

Wenden Sie das ZoneId an, um ein ZonedDateTime zu erhalten.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Wenn Ihnen nur das Datum ohne Uhrzeit wichtig ist, extrahieren Sie ein LocalDate.

LocalDate localDate = zdt.toLocalDate();

Um eine Zeichenfolge im ISO 8601-Standardformat JJJJ-MM-TT zu generieren, rufen Sie einfach toString auf. Die Java.time-Klassen verwenden beim Generieren/Parsen von Zeichenfolgen standardmäßig die Standardformate.

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 verwendete falsch mm (Minute der Stunde) statt MM (Monat des Jahres).

Verwenden Sie zum Parsen dasselbe Objekt DateTimeFormatter. Die Java.time-Klassen sind threadsicher, sodass Sie dieses Objekt beibehalten und wiederholt verwenden können, auch über Threads hinweg.

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

Über Java.time

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

Das Joda-Time -Projekt, das sich jetzt im Wartungsmodus befindet, rät zur Migration in die Java.time -Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 31 .

Woher bekomme ich die Java.time-Klassen?

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

3
Basil Bourque

Es ist einfach unter 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);
1
Ujitha

Bitte ändern Sie den kleinen "mm" -Monat in das Großbuchstaben "MM". Nachstehend finden Sie 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);**
0
Dilip