当前位置: 首页 > 知识库问答 >
问题:

LocalDateTime.parse的java.time.format.DateTimeParseException

花阳秋
2023-03-14
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TestProject {

    public static void main(String[] args) {
        String dateString = "2018-03-01T14:52:48Z";
        DateTimeFormatter dtf = DateTimeFormatter.ISO_INSTANT;
        LocalDateTime localDateTime = LocalDateTime.parse(dateString, dtf);
    }
}

投掷:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2018-03-01T14:52:48Z' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1959)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1894)
    at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at org.bdshadow.TestProject.main(TestProject.java:11)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.LocalDateTime.from(LocalDateTime.java:461)
    at java.base/java.time.format.Parsed.query(Parsed.java:235)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)
    ... 2 more
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.LocalDate.from(LocalDate.java:396)
    at java.base/java.time.LocalDateTime.from(LocalDateTime.java:456)
    ... 4 more

日期的字符串表示形式与datetimeformatter.iso_instant的javadocs中完全相同:https://docs.oracle.com/javase/8/docs/api/java/time/format/datetimeformatter.html#iso_instant。在Java9中没有改变:https://docs.oracle.com/javase/9/docs/api/java/time/format/datetimeformatter.html#iso_instant

共有1个答案

石思淼
2023-03-14

我相信这是因为ISO_instant用于解析instant

正如javadoc所说:

这是一个特例格式化程序,旨在允许人类可读的java.time.instant形式。

    String dateString = "2018-03-01T14:52:48Z";
    DateTimeFormatter dtf = DateTimeFormatter.ISO_INSTANT;
    Instant instant = Instant.from(dtf.parse(dateString));
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
 类似资料:
  • 问题内容: 我有按类别序列化为ISO-8601格式的字段。 当我收到以下JSON时, 我想通过工厂方法反序列化。我所有的尝试都以: 无法从值()实例化类型[简单类型,类]的值;没有单一的构造函数/工厂方法 我该如何实现?如何指定工厂方法? 编辑: 通过将jackson-datatype-jsr310模块包含到项目中并与一起使用,解决了该问题 。 问题答案: 香草杰克逊没有一种方法来 反序列化 一个

  • 我有一个字段,它通过类序列化为ISO-8601格式。 当我收到以下JSON时, 通过将jackson-datatype-jsr310模块包含到项目中,并使用和解决了这个问题。

  • 如果我传递了一个日期和时间字符串,一切都按预期进行: 如何将这样的日期解析为LocalDateTime(使用默认时间)?

  • 问题内容: 我正在尝试解析格式的日期。 它引发以下异常 它可以解析格式,但是格式失败。我也很累设定,但是在那种情况下也失败了。 问题答案: 原因是解析默认情况下区分大小写,并且格式化程序无法识别。它只会识别。 您可以使用并调用来构造不区分大小写的解析器: 将格式样式的其余部分的解析样式更改为不区分大小写。 解析可以区分大小写或不区分大小写-默认情况下区分大小写。此方法允许更改区分大小写的解析设置。

  • 运行代码后,我收到以下错误 线程 “main” java.time.format.DateTimeParseException 中的异常:文本 '03-09-1999' 无法在 java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2051) at java.base/java.time

  • 问题内容: 此处给出的ThreadLocal的目的是,该变量对于任何访问包含ThreadLocal变量的对象的线程都是局部的。将ThreadLocal变量作为类的成员,然后使其成为Thread的局部变量,而不是使Thread本身具有局部变量,这有什么区别? 问题答案: 线程是执行的单元,因此多个线程可以同时执行相同的代码。如果多个线程同时在一个对象/实例上执行,它们将共享实例变量。每个线程都有其自