DateTimeFormatter - ResolverStyle 问题

DateTimeFormatter - ResolverStyle issue

我想通过使用 DateTimeFormatter 解析字符串来创建一个 LocalDate 实例,我注意到如果我解析一个字符串,其中日期大于该月的天数,那么智能例如,解析器只是将其解析到最后一天。 (我要抛出异常)

    DateTimeFormatter smartFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    
    LocalDate.parse("20000431", smartFormatter);

这已解决到 2000 年 4 月 30 日,因此我添加了以下内容

    DateTimeFormatter strictFormatter = DateTimeFormatter.ofPattern("yyyyMMdd").withResolverStyle(ResolverStyle.STRICT);
    
    LocalDate.parse("20000431", strictFormatter);

正如预期的那样,这现在会引发异常。但是,我注意到它还会在 4 月 30 日引发异常,这显然是有效的。以下内容有什么问题?

    DateTimeFormatter strictFormatter = DateTimeFormatter.ofPattern("yyyyMMdd").withResolverStyle(ResolverStyle.STRICT);
    
    LocalDate.parse("20000430", strictFormatter);

那是因为 yyyy 表示 年代 STRICT简而言之,这样的日期可能需要出现“AD”或“BC”。

如果将模式字符串更改为

uuuuMMdd

它会起作用。

尽管 yyyy 看起来 是表达“当前年份”的自然方式,但实际上 并不意味着 [=29] =]“当前年份”,而是“当前时代的当前年份”。

您应该始终使用 uuuu 而不是 yyyy