2017-04-14 4 views
1

Ich möchte ein Datum von Sun Apr 10 07:05:45 MDT 2017 bis 2017-04-10T07:05:45.24Z formatieren.Datum Formatierung Parse Fehler Java

Ich verwende die folgenden:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE-LLL-dd H:mm:sszuuuu"); 
formatter.parse(date); 

Datum ist im Format oben angegeben.
Aber ich erhalte einen Parse-Fehler bei Index 3

+0

versuchen, solche lästigen Formate in erster Linie zu vermeiden, wenn bei alles möglich. Vermeiden Sie die 3-4 Buchstaben Pseudo-Zeitzonen-Abkürzungen wie "MDT" oder "EST" oder "IST", da sie * keine * echten Zeitzonen sind, nicht standardisiert und nicht einmal eindeutig (!). Geben Sie einen [richtigen Zeitzonennamen] (https://en.wikipedia.org/wiki/List_of_tz_zones_by_name) im Format "Kontinent/Region" an, z. B. ["America/Montreal"] (https: //en.wikipedia .org/wiki/Amerika/Montreal), ['Afrika/Casablanca'] (https://en.wikipedia.org/wiki/Africa/Casablanca) oder' Amerika/Denver'. –

Antwort

0

Was ist "L"? Versuchen Sie "MMM" für den Monat Abkürzung:

DateTimeFormatter formatter = DateTimeFormatter 
    .ofPattern("EEE-MMM-dd H:mm:sszuuuu"); 
+0

Aus der DateTimeFormatter-Dokumentation: M/L Monat-Jahr-Nummer/Text 7; 07; Juli; Juli; J. Aber ich habe versucht, MMM und immer noch den Parse-Fehler – Vic

1

Es gibt mehrere Probleme. Das richtige Muster ist "EEE MMM dd HH:mm:ss z uuuu"

  • müssen M statt L verwenden - ich untersuche warum im Moment. Siehe DateTimeFormatter month pattern letter "L" fails. Wenn Sie ein .format ("LLL") machen, wird 4 zurückgegeben, wie im 4. Monat.
  • brauchen Räume zu verwenden, anstatt -
  • brauchen Räume zwischen s, z und UUUU
  • HH verwenden müssen, das nicht H
  • 10. April war ein Montag, kein Sonntag

anzeigen Beispiel code run live at IdeOne.com.

String input = "Mon Apr 10 07:05:45 MDT 2017" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu" , Locale.US); 
ZonedDateTime zdt = ZonedDateTime.parse(input , f); 

zdt.toString(): 2017-04-10T07: 05: 45-06: 00 [America/Denver]

+0

Okay, hier ist, was ich geändert habe: neues Datum ist 'Fr Apr 07 08:21:19 MDT 2017' und eingestellt den Formatierer zu sein" "EEE MM dd HH: mm: ss z uuuu "' – Vic

+0

Noch ein Tipp: Geben Sie immer ein 'Locale' an. Wird verwendet, um (a) die menschliche Sprache für die Übersetzung des Tagesnamens, des Monatsnamens usw. zu bestimmen, und (b) die kulturellen Normen, die über Abkürzungen, Groß- und Kleinschreibung, Interpunktion, Trennzeichen usw. entscheiden. –