2016-12-12 2 views
2

Ich versuche, einen Datums-Zeichenfolge mit dem folgende Muster zu analysieren: yyMMdd und die STRICT Resolver wie folge:Problem mit DateTimeParseException bei der Verwendung von UNABHäNGIGER Resolver Stil

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat).withResolverStyle(ResolverStyle.STRICT); 
LocalDate.parse(expiryDate, formatter); 

ich folgende DateTimeParseException erhalten:

java.time.format.DateTimeParseException: Der Text '160501' konnte nicht analysiert werden: LokalesDatum konnte nicht von TemporalAccessor bezogen werden: {YearOfEra = 2016, MonthOfYear = 5, DayOfMonth = 1}, ISO vom Typ java.time.format.Parsed

Wenn ich auf den Standard resolve Stil swith, das heißt ResolverStyle.SMART es solche Termine als 30. Februar erlaubt.

Kann mir bitte jemand helfen?

+2

Ich bedauere, dass der 'java.time'-Entwurf nicht schlau genug ist, um zu erkennen, dass das Jahr der Ära (Symbol y) wie das proleptische gregorianische Jahr (Symbol u) behandelt werden sollte. Darüber hinaus sagt das ursprüngliche ISO-8601-Papier nichts über Epochen aus. Daher sollte eine einfache Jahr-Monat-Tag-Kombination wirklich so gehandhabt werden wie das, was ISO sagt, die Ära ignorierend und den proleptischen Gregorianischen Kalender verwendend. –

Antwort

4

Der strenge Resolver erfordert eine Ära mit YearOfEra. Ändern Sie Ihr Muster, um "u" anstelle von "y" zu verwenden, und es wird funktionieren, dh. "uuMMdd".

Verwandte Themen