无法在java 11中解析本地日期时间

laik7k3q  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(340)

我有下面的代码。

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)

z4bn682m

z4bn682m1#

LocalDateTime 没有时区或区域偏移信息,而日期时间字符串有区域偏移。这封信, Z 在日期的末尾,时间字符串代表zulu,即区域偏移 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

相关问题