java.time.format.DateTimeParseException:Text';2021-02-19T00:45:09.798Z';无法分析,在索引23处找到未分析的文本

java.time.format.DateTimeParseException:Text';2021-02-19T00:45:09.798Z';无法分析,在索引23处找到未分析的文本,java,java-time,Java,Java Time,我是java新手,我不明白我的日期解析有什么问题。我已经尝试了许多类似帖子的解决方案,阅读了DateTimeFormatter文档,但仍然卡住了。感谢您的帮助。多谢各位 代码 错误 我还尝试使用模式(pattern).withZone(zone)的DateTimeFormatter.ofPattern(pattern).withZone(zone)并收到相同的错误。您不需要格式化程序来解析给定的日期时间字符串,因为它已经符合预期的默认格式 输出: 2021-02-19T00:45:09.798Z

我是java新手,我不明白我的日期解析有什么问题。我已经尝试了许多类似帖子的解决方案,阅读了DateTimeFormatter文档,但仍然卡住了。感谢您的帮助。多谢各位

代码

错误


我还尝试使用模式(pattern).withZone(zone)的
DateTimeFormatter.ofPattern(pattern).withZone(zone)
并收到相同的错误。

您不需要格式化程序来解析给定的日期时间字符串,因为它已经符合预期的默认格式

输出:

2021-02-19T00:45:09.798Z
了解有关现代日期时间API的更多信息


*无论出于何种原因,如果您必须坚持使用Java 6或Java 7,您都可以使用哪些后端端口将大部分Java.time功能移植到Java 6和7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。

输入的索引23是时间偏移指示器
Z
。事实上,如果我们看一下,我们会看到“Z”是偏移的一种模式:

偏移量Z:[…]一个、两个或三个字母输出小时和分钟,不带冒号,例如“+0130”。当偏移量为零时,输出将为“+0000”

,和“X”作为偏移模式,同时使用“Z”表示零:

偏移量X:[…]当要输出的偏移量为零时,图案字母“X”(大写)将输出“Z” . 因此,这项工作:

模式的日期时间格式(“uuu-MM-dd'HH:MM:ss.SSSX”)
也就是说,如果您的输入是众所周知的ISO 8601标准格式,您可能需要使用一个预定义的格式化程序,例如(或其他一些,取决于您输入的ZoneId/offset用法)。

因为不存在时区,我会在这里使用
Instant
OffsetDateTime
而不是
zoneDateTime
@BasilBourque,从技术上讲,
Z
是Zulu时区,它是GMT的同义词。@VGR UTC/Zulu实际上不是时区。它是定义所有时区的基准。这就是为什么java.time提供了与
ZoneDateTime
分开的
Instant
OffsetDateTime
类,以及为什么常量
UTC
是在
ZoneOffset
类上定义的,而不是在
ZoneId
类上定义的。偏移量只是小时分秒数,正或负。时区更重要。时区是特定地区的人们使用的偏移量的过去、现在和未来变化的历史。因此,对于这个答案,
ZonedDateTime
是不合适的。公平地说,还有
DateTimeFormatter.ISO_INSTANT
支持
Z
和Z,总是期望一个瞬间。因此,根据OP实际期望的输入类型,
即时
可能是一种选择(在
ZonedDateTime
OffsetDateTime
旁边),我认为我们无法从单个可用输入中真正分辨出来。但是:Z通常表示偏移,而不是ZoneId,即使它也是一个很好的ZoneId。
java.time.format.DateTimeParseException: Text '2021-02-19T00:45:09.798Z' could not be parsed, unparsed text found at index 23
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        String date = "2021-02-19T00:45:09.798Z";
        ZonedDateTime parsedDate = ZonedDateTime.parse(date);
        System.out.println(parsedDate);
    }
}
2021-02-19T00:45:09.798Z