2017-11-20 3 views
0

Spiele in groovyConsole mit DateTimeFormatter und DateTimeFormatterBuilderDateTimeFormatterBuilder Parsing Tage unter 31 SMART nicht UNABHäNGIGER wenn appendValueReduced verwendet wird

String inputDateString = "31.2.58" // german date format 

dtfIn = DateTimeFormatter 
     .ofPattern ("d.M.uu") 
     .withResolverStyle (ResolverStyle.STRICT) 

dtfIn.parse(inputDateString) // ERROR as expected 

... aber

// with base range 1937-2034 
dtfIn = new DateTimeFormatterBuilder() 
     .appendPattern("d.M.") 
     .appendValueReduced(ChronoField.YEAR, 2, 2, Year.now().getValue() - 80) 
     .parseStrict() 
     .toFormatter() 

dtfIn.parse(inputDateString) // Result: 1958-02-28 

So DateTimeFormatterBuilder mit .parseStrict() würde analysiert eher SMART, was DateTimeFormatterBuilder überhaupt nicht tun sollte, aber entweder STRICT oder LENIENT (?) '

Mit Tageszahlen über 31 werde ich Erhalte einen Fehler.

Das Problem scheint zu sein .appendValueReduced(). Ohne würde ich ein Fehler wie erwartet werden.

Was mache ich falsch?

Dank

Rawi

Antwort

1

DateTimeFormatter von DateTimeFormatterBuilder.toFormatter() ist in der Tat SMART als documented:

Der Resolver Stil wird

zu erhalten UNABHÄNGIGER man verwenden hat DateFormatter.withResolverStyle(ResolverStyle) SMART sein in diesem Fall wie folgt:

.toFormatter().withResolverStyle(ResolverStyle.STRICT); 
+0

Dank Mikko. Ja, es funktioniert auf diese Weise. Könnten Sie bitte erklären, warum die Methode .parseStrict() nicht geholfen hat? Ich dachte, dass es dem DateTimeFormatterBuilder genau das sagen würde. – rawi

Verwandte Themen