代码之家  ›  专栏  ›  技术社区  ›  rawi

如果使用appendValueReduced,DateTimeFormatterBuilder解析天数低于31天SMART不严格

  •  0
  • rawi  · 技术社区  · 7 年前

    在groovyConsole中使用DateTimeFormatter和DateTimeFormatterBuilder

    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
    

    所以DateTimeFormatterBuilder与。parseStrict()解析相当智能,DateTimeFormatterBuilder根本不应该这样做,但要么严格要么宽容(?)

    如果天数超过31,我会出错。

    问题似乎是。appendValueReduced()。 没有 正如所料,我会成为一个错误。

    谢谢

    拉维

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mikko Maunu    7 年前

    DateTimeFormatter 从…起 DateTimeFormatterBuilder.toFormatter() 确实很聪明 documented

    分解器样式将是智能的

    要获得严格的要求,必须使用 DateFormatter.withResolverStyle(ResolverStyle) 在这种情况下,如下所示:

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