无法在 Java 11 中解析本地 DateTime
Local DateTime cannot be parsed in Java 11
我有以下代码。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
LocalDateTime myDate = LocalDateTime.parse("2020-11-16T02:27:39.345Z", formatter);
但它在第二行抛出以下错误。不知道它为什么抱怨 Z
java.time.format.DateTimeParseException: Text '2020-11-16T02:27:39.345Z' could not be parsed at index 23
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
LocalDateTime
没有时区或时区偏移量信息,而您的日期时间字符串具有时区偏移量。日期时间字符串末尾的字母 Z
代表祖鲁语,即 UTC
的时区偏移量。您可以直接将其解析为 OffsetDateTime
或 ZonedDateTime
或 Instant
(即不使用自定义 DateTimeFormatter
)。
演示:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeString = "2020-11-16T02:27:39.345Z";
OffsetDateTime odt = OffsetDateTime.parse(dateTimeString);
System.out.println(odt);
ZonedDateTime zdt = ZonedDateTime.parse(dateTimeString);
System.out.println(zdt);
Instant instant = Instant.parse(dateTimeString);
System.out.println(instant);
}
}
输出:
2020-11-16T02:27:39.345Z
2020-11-16T02:27:39.345Z
2020-11-16T02:27:39.345Z
我有以下代码。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
LocalDateTime myDate = LocalDateTime.parse("2020-11-16T02:27:39.345Z", formatter);
但它在第二行抛出以下错误。不知道它为什么抱怨 Z
java.time.format.DateTimeParseException: Text '2020-11-16T02:27:39.345Z' could not be parsed at index 23
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
LocalDateTime
没有时区或时区偏移量信息,而您的日期时间字符串具有时区偏移量。日期时间字符串末尾的字母 Z
代表祖鲁语,即 UTC
的时区偏移量。您可以直接将其解析为 OffsetDateTime
或 ZonedDateTime
或 Instant
(即不使用自定义 DateTimeFormatter
)。
演示:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeString = "2020-11-16T02:27:39.345Z";
OffsetDateTime odt = OffsetDateTime.parse(dateTimeString);
System.out.println(odt);
ZonedDateTime zdt = ZonedDateTime.parse(dateTimeString);
System.out.println(zdt);
Instant instant = Instant.parse(dateTimeString);
System.out.println(instant);
}
}
输出:
2020-11-16T02:27:39.345Z
2020-11-16T02:27:39.345Z
2020-11-16T02:27:39.345Z