Java 仅当模式中存在空格时,由数字文字后置的DateTimeFormatter模式才有效
我看到了一些类似的问题,关于这样的问题,bug已经被修复了。现在我想知道我是做错了什么,还是这个案子还没有涵盖在内。我的问题是我必须解析一个后跟零的日期,所以模式应该是yyyyMMdd'0000'。然而,它失败了,但如果我在其中放置一个空格,它就会工作:yyyy-MMdd'0000'Java 仅当模式中存在空格时,由数字文字后置的DateTimeFormatter模式才有效,java,datetime,parsing,Java,Datetime,Parsing,我看到了一些类似的问题,关于这样的问题,bug已经被修复了。现在我想知道我是做错了什么,还是这个案子还没有涵盖在内。我的问题是我必须解析一个后跟零的日期,所以模式应该是yyyyMMdd'0000'。然而,它失败了,但如果我在其中放置一个空格,它就会工作:yyyy-MMdd'0000' DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy MMdd'0000'").toFormatt
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy MMdd'0000'").toFormatter().withResolverStyle(ResolverStyle.STRICT);
System.out.println(formatter.parse(formatter.format(ZonedDateTime.now())));
formatter = new DateTimeFormatterBuilder().appendPattern("yyyyMMdd'0000'").toFormatter().withResolverStyle(ResolverStyle.STRICT);
System.out.println(formatter.parse(formatter.format(ZonedDateTime.now())));
我知道我可以用小时和分钟模式替换文字部分,这会起作用,但我想在输入上使用它作为验证机制,因此它应该在其他值上失败,而不需要额外的编码。
我用oraclejdk1.8.0221和openjdk13+33进行了尝试
谢谢 你差点就成功了。只要做
MMMM
formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyyMMMMdd'0000'")
.toFormatter()
.withResolverStyle(ResolverStyle.STRICT);
看起来不太整洁,但在解析和渲染时效果良好:
DateTimeFormatter df = new DateTimeFormatterBuilder()
.appendValue(YEAR, 4)
.appendPattern("MMdd'0000'")
.toFormatter()
.withChronology(IsoChronology.INSTANCE)
.withResolverStyle(ResolverStyle.STRICT);
log.info(LocalDate.parse("201909260000", df).toString()); // 2019-09-26
log.info(df.format(LocalDate.of(2019, 9, 26))); // 201909260000
它肯定是这样工作的,但是我需要月份作为数字(填充到两位数),所以这就是为什么我在我的示例中使用MM.Formatting。不幸的是,解析在
appendLiteral
中引发了相同的异常:(更新了一个答案谢谢,这就成功了!我正在从配置中获取模式,因此仍然需要进行一些微调,但这可以通过一个丑陋的解决方法来完成。。。