java.time.format.DateTimeParseException:Text';2021-02-19T00:45:09.798Z';无法分析,在索引23处找到未分析的文本
我是java新手,我不明白我的日期解析有什么问题。我已经尝试了许多类似帖子的解决方案,阅读了DateTimeFormatter文档,但仍然卡住了。感谢您的帮助。多谢各位 代码 错误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
我还尝试使用模式(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