【问题标题】:DateTimeFormatter - ResolverStyle issue [duplicate]DateTimeFormatter - ResolverStyle 问题 [重复]
【发布时间】:2021-12-06 12:06:53
【问题描述】:

我想通过使用 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);

【问题讨论】:

标签: java datetimeformatter


【解决方案1】:

那是因为yyyy 表示年代STRICTly 来说,这样的日期可能预计会出现“AD”或“BC”。

如果将模式字符串更改为

uuuuMMdd

它会起作用的。

尽管yyyy 看起来是表达“当年”的自然方式,但它实际上并不表示“当年”,而是“当前时代的当前年份”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多