Instant.parse和RFC3339字符串引发java.time.format.DateTimeParseException

bad*_*era 4 java java-8 java-time

如果我做

import java.time.Instant;
...
    Instant instant = Instant.parse("2018-01-02T18:14:59.000+01:00")
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Caused by: java.time.format.DateTimeParseException: Text '2018-06-19T23:00:00.000+01:00' could not be parsed at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
Run Code Online (Sandbox Code Playgroud)

但是如果我这样做

    Instant instant = Instant.parse("2018-06-19T23:00:00.000Z");
Run Code Online (Sandbox Code Playgroud)

一切正常。

我想念什么?第一次字符串有什么问题?

azr*_*zro 5

原因是您的第一个Stringparse方法可接受的格式不匹配


如文档所述Instant#parse(CharSequence text)

该字符串必须表示UTC中的有效时刻,并使用DateTimeFormatter.ISO_INSTANT进行解析

DateTimeFormatter#ISO_INSTANT状态的文档:

用于格式化或解析UTC中的即时消息的ISO即时格式化程序,例如“ 2011-12-03T10:15:30Z”。


要获取Instant字符串,您需要:Workable Demo

String str = "2018-01-02T18:14:59.000+01:00";
Instant instant = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(str, Instant::from);
Run Code Online (Sandbox Code Playgroud)