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

标签 java java-time date-parsing

下面的代码工作正常

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));

这是 parseException

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

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

我找到了question这可能与我的类似,但我不确定这是否重复。

最佳答案

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

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

unparsed text found at index 10

很好地描述了情况。

关于java - 在 DateTimeFormatter 中使用多个可选模式时是否有任何规则或顺序重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445622/

相关文章:

java - 对单个图形进行动画处理

java - 如何从 JavaFX 应用程序读取 X11 剪贴板?

java.time.DateTimeFormat 意外行为

javascript - 在 JavaScript 中将字符串解析为日期

Java抽象返回值

java - ArrayList 如何在恒定时间内检索数据?

java - LocalDate:等于与 isEqual

使用 DateTimeFormatter 的 java.time.format.DateTimeParseException

java -/日期(长+1000)/格式

java - 如何在 Java 中解析包含 Μαϊ(希腊五月)的日期字符串