在DateTimeFormatter

时间:2018-03-23 08:50:39

标签: 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可能与我的相似,但我不确定这是否重复。

1 个答案:

答案 0 :(得分:2)

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

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

  

在索引10找到的未解析文本

很好地描述了这种情况。