java.time.format.DateTimeParseException:无法在索引 24 处解析文本“2016-08-30T06:18:17:698-0600”

java.time.format.DateTimeParseException: Text '2016-08-30T06:18:17:698-0600' could not be parsed at index 24

这是我的 java8 这个日期字符串的代码 "2016-08-30T06:18:17:698-0600"

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-DD'T'HH:mm:ss:SSS'-'XXX");
    String attDate = "2016-08-30T06:18:17:698-0600";
    //attDate = attDate.substring(0, 19);
    System.out.println("####attask date: "+attDate);
    LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
    System.out.println(dt);

使用 LocalDate 和截断的日期字符串可以解决这个问题,但我不能简单地删除 Time 并使用 LocalDate 而不是 LocalDateTime

请指出这里出了什么问题。我还需要知道为什么您的回答会奏效。

区域偏移中的减号是区域偏移表达式的一部分,您不应该将其转义为文字。

如果您将模式更改为 yyyy-MM-dd'T'HH:mm:ss.SSSZ,它将打印 2016-08-30T06:18:17.123

但是在你的代码中,日期是 : 以毫秒为单位,而正确的是 .

完整代码:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String attDate = "2016-08-30T06:18:17.123-0600";
        //attDate = attDate.substring(0, 19);
        System.out.println("####attask date: "+attDate);
        LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
        System.out.println(dt);

输出:

####attask date: 2016-08-30T06:18:17.123-0600
2016-08-30T06:18:17.123