Wie konvertiere ich die Zeichenfolge 2018-04-10T04:00:00.000Z in DateTime? [duplicate]

Lesezeit: 4 Minuten

Ich erhalte ein Datum von einer JSON-API, das so aussieht: “2018-04-10T04:00:00.000Z”. Ich möchte es konvertieren, um ein Date- oder String-Objekt zu erhalten und etwas wie “01-04-2018” zu erhalten, das “dd-MM-YYYY” ist. Wie kann ich es tun?

  • Verwenden SimpleDateFormat

    Benutzer2575725

    10. April 2018 um 11:13 Uhr

  • …oder verwenden Sie die Java 8-Datums-API. In jedem Fall ist dies ein Duplikat.

    – Tim Biegeleisen

    10. April 2018 um 11:13 Uhr

  • @Arvind Bitte bringen Sie den Jungen nicht bei, die längst veralteten und notorisch lästigen zu verwenden SimpleDateFormat Klasse. Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wir so viel Besseres drin java.timedie moderne Java-API für Datum und Uhrzeit und sein DateTimeFormatter. Ja, Sie können es auf Android verwenden. Für ältere Android-Geräte siehe How to use ThreeTenABP in Android Project.

    – Ole VV

    10. April 2018 um 11:25 Uhr

  • Suchen Sie vor dem Posten nach Stack Overflow. Sie können davon ausgehen, dass alle grundlegenden Datums- und Uhrzeitfragen bereits gestellt und beantwortet wurden.

    – Basilikum Bourque

    10. April 2018 um 16:29 Uhr


Benutzeravatar von Tamas Rev
Tamas Rev

Update: Verwenden DateTimeFormateingeführt in Java 8:

Die Idee ist, zwei Formate zu definieren: eines für das Eingabeformat und eines für das Ausgabeformat. Mit dem Eingabeformatierer parsen, dann mit dem Ausgabeformatierer formatieren.

Ihr Eingabeformat sieht ziemlich normal aus, mit Ausnahme des Nachsatzes Z. Wie auch immer, lass uns damit umgehen: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". Das Schleppen 'Z' ist der interessante Teil. Normalerweise gibt es hier Zeitzonendaten, wie z -0700. Das Muster wäre also ...Zdh ohne Apostrophe.

Das Ausgabeformat ist viel einfacher: "dd-MM-yyyy". Achte auf das Kleine y -S.

Hier ist der Beispielcode:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse("2018-04-10T04:00:00.000Z", inputFormatter);
String formattedDate = outputFormatter.format(date);
System.out.println(formattedDate); // prints 10-04-2018

Ursprüngliche Antwort – mit alter API SimpleDateFormat

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = inputFormat.parse("2018-04-10T04:00:00.000Z");
String formattedDate = outputFormat.format(date);
System.out.println(formattedDate); // prints 10-04-2018

  • Bitte bringen Sie den Jungen nicht bei, die längst veralteten und notorisch lästigen zu verwenden SimpleDateFormat Klasse. Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wir so viel Besseres drin java.timedie moderne Java-API für Datum und Uhrzeit und sein DateTimeFormatter. Ja, Sie können es auf Android verwenden. Für ältere Android-Geräte siehe How to use ThreeTenABP in Android Project.

    – Ole VV

    10. April 2018 um 11:24 Uhr

  • Richtig, Sir, die Antwort wurde aktualisiert.

    – Tamas Rev

    10. April 2018 um 11:34 Uhr

  • LocalDate.parse("2018-04-10T04:00:00.000Z", DateTimeFormatter.ISO_OFFSET_DATE_TIME) funktioniert gut und gibt 2018-04-10. Z ist ein vollkommen gültiger Offset, der eher als +00:00 verwendet wird.

    – Ole VV

    10. April 2018 um 11:45 Uhr

  • Der Z bedeutet, dass das Datum/die Uhrzeit in UTC ist, gemäß Die Definition von ISO 8601. Wie von OleVV gesagt, kann es verwendet werden, wenn der Offset Null ist (+00:00). Verwenden SimpleDateFormat mit Z in Anführungszeichen lässt es das Z als Literal (den Buchstaben Z) analysieren, anstatt es als Null-Offset zu analysieren. Das Problem ist, dass in diesem Fall SimpleDateFormat verwendet die JVM-Standardzeitzone und die Date einem falschen Zeitpunkt entsprechen.

    – paulXkt

    10. April 2018 um 18:02 Uhr


  • Es scheint, dass auf diese Weise mindestens API-Level 26 erforderlich ist. Ich frage mich, ob es eine Möglichkeit gibt, dies mit Funktionen von mindestens API 23 zu tun

    – Kira Nofans

    9. Juni 2020 um 5:49 Uhr

Benutzeravatar von Deb
Deb

Datumsmuster verwenden yyyy-MM-dd'T'HH:mm:ss.SSS'Z' und Java 8 könnten Sie tun

String string = "2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);

Update: Verwenden Sie für Pre-26 Joda-Zeit

String string = "2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
LocalDate date = org.joda.time.LocalDate.parse(string, formatter);

Fügen Sie in der Datei app/build.gradle Folgendes hinzu:

dependencies {    
    compile 'joda-time:joda-time:2.9.4'
}

  • funktioniert super, aber dieser Aufruf erfordert API Level 26 (aktuelles Minimum ist 15) auf meiner Android-App und ich möchte es vorerst nicht ändern. Gibt es eine andere Alternative?

    – Miguel Barra

    10. April 2018 um 11:23 Uhr

  • Dies funktioniert auch auf älterem Android gut. Für Pre-Level-26 siehe How to use ThreeTenABP in Android Project.

    – Ole VV

    10. April 2018 um 11:25 Uhr

  • Da die Zeichenfolge im ISO 8601-Format vorliegt, benötigen Sie nicht einmal einen expliziten Formatierer. Der java.time Klassen analysieren dieses Format als Standard. LocalDate date = OffsetDateTime.parse(string).toLocalDate().

    – Ole VV

    10. April 2018 um 11:30 Uhr

  • Joda-Time war eine sehr gute Bibliothek. „Joda-Time gilt als weitgehend „fertiges“ Projekt. … Wenn Sie Java SE 8 verwenden, migrieren Sie bitte zu java.time (JSR-310).“ Zitiert aus die Joda-Time-Homepage. Daher empfehle ich ThreeTenABP gegenüber Joda-Time.

    – Ole VV

    10. April 2018 um 11:33 Uhr

  • Diese Antwort ignoriert das entscheidende Problem der Ich-Zone. Für jeden gegebenen Moment, das Datum variiert rund um den Globus nach Zonen.

    – Basilikum Bourque

    10. April 2018 um 16:28 Uhr

1444280cookie-checkWie konvertiere ich die Zeichenfolge 2018-04-10T04:00:00.000Z in DateTime? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy