java.time:日期“20150901023302166”的DateTimeParseException

时间:2015-11-24 14:37:31

标签: java java-8 java-time

LocalDateTime.parse("20150901023302166", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))

给出错误:

  

java.time.format.DateTimeParseException:无法在索引0解析文本'20150901023302166'

1 个答案:

答案 0 :(得分:11)

解决方法是使用DateTimeFormatterBuilder自己构建格式化程序,并为每个字段设置固定宽度。此代码生成正确的结果。

public static void main(String[] args) {
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                        .appendValue(ChronoField.YEAR, 4)
                                        .appendValue(ChronoField.MONTH_OF_YEAR, 2)
                                        .appendValue(ChronoField.DAY_OF_MONTH, 2)
                                        .appendValue(ChronoField.HOUR_OF_DAY, 2)
                                        .appendValue(ChronoField.MINUTE_OF_HOUR, 2)
                                        .appendValue(ChronoField.SECOND_OF_MINUTE, 2)
                                        .appendValue(ChronoField.MILLI_OF_SECOND, 3)
                                        .toFormatter();

    System.out.println(LocalDateTime.parse("20150901023302166", formatter));
}

因此,从模式构建格式化程序时,看起来格式化程序存在问题。在搜索OpenJDK JIRA之后,似乎这确实是一个错误,如JDK-8031085中所引用并计划在JDK 9中修复。