首页 > 解决方案 > 由数字文字后缀的 DateTimeFormatter 模式仅在模式中存在空格时才有效

问题描述

我看到了一些类似的问题,并且已经修复了有关此类问题的错误。现在我想知道我是否做错了什么,或者这个案例仍然没有涵盖。我的问题是我必须解析一个后跟零的日期,所以模式是 yyyyMMdd'0000'。但是它失败了,但是如果我在其中放置一个空格就可以了: yyyy MMdd'0000'

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

我知道我可以用小时和分钟模式替换文字部分,它会起作用,但我想将它用作输入的验证器机制,因此它应该在其他值上失败,而无需额外编码。我使用 Oracle JDK 1.8.0_221 和 OpenJDK 13+33 进行了尝试

谢谢!

标签: javadatetimeparsing

解决方案


你几乎明白了。做吧MMMM

formatter = new DateTimeFormatterBuilder()
        .appendPattern("yyyyMMMMdd'0000'")
        .toFormatter()
        .withResolverStyle(ResolverStyle.STRICT);

推荐阅读