【问题标题】:java.time : DateTimeParseException for date "20150901023302166" [duplicate]java.time:日期“20150901023302166”的 DateTimeParseException [重复]
【发布时间】:2015-11-24 14:37:31
【问题描述】:
LocalDateTime.parse("20150901023302166", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))

给出错误:

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

【问题讨论】:

    标签: java java-8 java-time


    【解决方案1】:

    一种解决方法是使用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 中修复。

    【讨论】:

    • 感谢您的帮助,我会使用该代码直到 JDK9
    • 哇——我从没想到问题出在构建格式化程序的开始。不错的收获:) 将删除我的答案...
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多