Java 8 如果使用appendValueReduced,DateTimeFormatterBuilder解析天数低于31天SMART不严格
使用DateTimeFormatter和DateTimeFormatterBuilder在groovyConsole中玩Java 8 如果使用appendValueReduced,DateTimeFormatterBuilder解析天数低于31天SMART不严格,java-8,datetime-format,groovy-console,Java 8,Datetime Format,Groovy Console,使用DateTimeFormatter和DateTimeFormatterBuilder在groovyConsole中玩 String inputDateString = "31.2.58" // german date format dtfIn = DateTimeFormatter .ofPattern ( "d.M.uu" ) .withResolverStyle ( ResolverStyle.STRICT ) dtfIn.parse(inputDat
String inputDateString = "31.2.58" // german date format
dtfIn = DateTimeFormatter
.ofPattern ( "d.M.uu" )
.withResolverStyle ( ResolverStyle.STRICT )
dtfIn.parse(inputDateString) // ERROR as expected
……但是
// 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
因此,带有.parseStrict()的DateTimeFormatterBuilder将进行相当智能的解析,DateTimeFormatterBuilder除了严格或宽松(?)之外根本不应该这样做
如果日数超过31,我会出错
问题似乎是。appendValueReduced()。没有它,我会像预期的那样成为一个错误
我做错了什么
谢谢
来自
DateTimeFormatterBuilder.toFormatter()
的RawiDateTimeFormatter
确实很聪明,因为:
解析器样式将是智能的
要获得严格的解析,必须使用DateFormatter.withResolverStyle(ResolverStyle)
在这种情况下,如下所示:
.toFormatter().withResolverStyle(ResolverStyle.STRICT);
DateTimeFormatterBuilder.toFormatter()
的DateTimeFormatter
确实很聪明,因为:
解析器样式将是智能的
要获得严格的解析,必须使用DateFormatter.withResolverStyle(ResolverStyle)
在这种情况下,如下所示:
.toFormatter().withResolverStyle(ResolverStyle.STRICT);
谢谢Mikko。是的,这样工作正常。请解释一下,为什么方法.parseStrict()没有帮助?我想它会告诉DateTimeFormatterBuilder这样做..parseStrict()不起作用,因为toFormatter()忽略以前的设置值并使用自己的(SMART)。谢谢Mikko。是的,这样工作正常。请解释一下,为什么方法.parseStrict()没有帮助?我想它会告诉DateTimeFormatterBuilder这样做..parseStrict()不起作用,因为toFormatter()忽略以前的设置值并使用他自己的(SMART)。