生成的解析器DateTimeFormatter.ofPattern表现出以下有趣的行为,这阻止了我编写模式来解析像这样的字符串20150100:
System.out.println(DateTimeFormatter.ofPattern("yyyyMM").parse("201501", YearMonth::from)); // works
System.out.println(DateTimeFormatter.ofPattern("yyyyMM'aa'").parse("201501aa", YearMonth::from)); // works
System.out.println(DateTimeFormatter.ofPattern("yyyyMM'00'").parse("20150100", YearMonth::from));
// java.time.format.DateTimeParseException: Text '20150100' could not be parsed at index 0
Run Code Online (Sandbox Code Playgroud)
我调试了代码,似乎问题是由超出字符串末尾的年份字段解析引起的(三个 y 和更多的最大宽度始终为 19)。但是,我不明白它如何在没有'00'文字的情况下适用于模式。
有没有办法解决这个问题而不必使用格式化程序构建器?
编辑:
由于下面的 Jarrod 确认它有问题,我做了更多的谷歌搜索,终于找到了错误报告:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8031085
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8032491
两者都只在 Java 9 中修复......