Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当模式中存在空格时,由数字文字后置的DateTimeFormatter模式才有效_Java_Datetime_Parsing - Fatal编程技术网

Java 仅当模式中存在空格时,由数字文字后置的DateTimeFormatter模式才有效

Java 仅当模式中存在空格时,由数字文字后置的DateTimeFormatter模式才有效,java,datetime,parsing,Java,Datetime,Parsing,我看到了一些类似的问题,关于这样的问题,bug已经被修复了。现在我想知道我是做错了什么,还是这个案子还没有涵盖在内。我的问题是我必须解析一个后跟零的日期,所以模式应该是yyyyMMdd'0000'。然而,它失败了,但如果我在其中放置一个空格,它就会工作:yyyy-MMdd'0000' DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy MMdd'0000'").toFormatt

我看到了一些类似的问题,关于这样的问题,bug已经被修复了。现在我想知道我是做错了什么,还是这个案子还没有涵盖在内。我的问题是我必须解析一个后跟零的日期,所以模式应该是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())));
我知道我可以用小时和分钟模式替换文字部分,这会起作用,但我想在输入上使用它作为验证机制,因此它应该在其他值上失败,而不需要额外的编码。 我用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
中引发了相同的异常:(更新了一个答案谢谢,这就成功了!我正在从配置中获取模式,因此仍然需要进行一些微调,但这可以通过一个丑陋的解决方法来完成。。。