在 DateTimeFormatter 中使用多个可选模式时,是否有任何规则或顺序的重要性



下面的代码工作正常

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy-MM-dd HH:mm:ss][yyyy-MM-dd]");
System.out.println(LocalDate.parse("1991-01-28", formatter));
System.out.println(LocalDate.parse("1991-01-28 00:00:00", formatter));

但这会引发一个异常(唯一的区别是模式的顺序(

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy-MM-dd][yyyy-MM-dd HH:mm:ss]");
System.out.println(LocalDate.parse("1991-01-28", formatter));
System.out.println(LocalDate.parse("1991-01-28 00:00:00", formatter));

这是解析异常

Exception in thread "main" java.time.format.DateTimeParseException: Text '1991-01-28 00:00:00' could not be parsed, unparsed text found at index 10

我找不到这种行为的原因。这背后的原因是什么?

我发现了一个可能与我的问题相似的问题,但我不确定这是否是重复的。

根据我的经验,经验法则是将较长的格式放在较短的格式之前,就像在第一个片段中一样。你的观察似乎证实了我的规则。并不是说我在任何地方看到过它的描述,你可能想搜索,你可能会找到。

在第二种情况下发生的情况是第一个可选模式与 1991-01-28 匹配。其余字符串00:00:00(带有前导空格(。此余数与第二个可选模式不匹配,然后跳过第二个可选模式。之后,您收到的消息

在索引 10 中找到的未分析文本

很好地描述了情况。

相关内容

最新更新