首页 > 解决方案 > LocalDateTime.parse() 格式没有小时、分钟等

问题描述

我想将日期时间字符串解析为 LocalDateTime。输入格式可能不包含小时、分钟等字段。例如,它可以是“yyyy M d”。鉴于此模式,您可以将字符串解析为 LocalDate,但不能解析为 LocalDateTime。我想创建 LocalDateTime。

有一种方法可以使用 DateTimeFormatterBuilder 执行此操作,如下所示。

// this code works. But I don't want to use DateTimeFormatterBuilder
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("yyyy")
                .appendLiteral('-')
                .appendValue(MONTH_OF_YEAR)
                .appendLiteral('-')
                .appendValue(DAY_OF_MONTH)
                .parseDefaulting(HOUR_OF_DAY, 12)
                .parseDefaulting(MINUTE_OF_HOUR, 13)
                .parseDefaulting(SECOND_OF_MINUTE, 14)
                .toFormatter();
        System.out.println(LocalDateTime.parse("2015-09-05", formatter));

但我想使用 DateTimeFormatter.ofPattern() 而不是 DateTimeFormatterBuilder。但我不知道如何使下面的代码工作:

// this code doesn't work.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d");
        System.out.println(LocalDateTime.parse("2015-09-05", formatter));

它抛出异常

Exception in thread "main" java.time.format.DateTimeParseException: Text '2015-09-05' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2015-09-05 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
...

标签: javadatetime

解决方案


推荐阅读