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