Vraag Hoe parseer je een volledige maandstring met DateFormat in Java?


Ik heb geprobeerd

    DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
    Date d = fmt.parse("June 27, 2007");

Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"

De java-documenten zeggen dat ik vier tekens moet gebruiken om bij het volledige formulier te passen. Ik kan MMM alleen met succes gebruiken met verkorte maanden zoals "Jun", maar ik moet het volledige formulier matchen.

Tekst: Voor opmaak, als het nummer   van patroon letters is 4 of meer, de   volledige vorm wordt gebruikt; anders een tekort   of afgekorte vorm wordt gebruikt als   beschikbaar. Voor het ontleden zijn beide vormen   geaccepteerd, onafhankelijk van het aantal   patroon letters.

http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html


38
2018-02-08 01:31


oorsprong


antwoorden:


Waarschijnlijk gebruikt u een landinstelling waarvan de namen niet "januari", "februari", enz. Zijn, maar enkele andere woorden in uw lokale taal.

Probeer bijvoorbeeld de landinstelling die u wilt gebruiken op te geven Locale.US:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27,  2007");

Ook heb je een extra spatie in de datastring, maar dit heeft in feite geen effect op het resultaat. Het werkt hoe dan ook.


95
2018-02-08 01:43



Gewoon om dit aan te vullen met de nieuwe Java 8 API:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter();
TemporalAccessor ta = formatter.parse("June 27, 2007");
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
assertThat(d.getYear(), is(107));
assertThat(d.getMonth(), is(5));

Een beetje meer uitgebreid maar je ziet ook dat de methoden van de gebruikte Datum zijn verouderd ;-) Tijd om verder te gaan.


1
2018-03-12 13:41