Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Java 11中分析本地日期时间_Java_Java 11_Datetime Parsing_Localdatetime - Fatal编程技术网

无法在Java 11中分析本地日期时间

无法在Java 11中分析本地日期时间,java,java-11,datetime-parsing,localdatetime,Java,Java 11,Datetime Parsing,Localdatetime,我有下面的代码 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.DateTim

我有下面的代码

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
代表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
输出:

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

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
输出:

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

对于该日期格式,可以使用
“yyyy-MM-dd'T'HH:MM:ss.SSSz”
“yyy-MM-dd'T'HH:MM:ss.SSS'Z'
@ernest\k它工作得非常好。你能解释一下背后的原因吗。可能添加为答案。
Z
Z
之间的差异已记录在案
'Z'
只是让解析器按照字面意思理解字母。这是否回答了您的问题。还是这个。您不需要指定格式化程序。只需使用
Instant.parse(“2020-11-16T02:27:39.345Z”)
OffsetDateTime.parse(“2020-11-16T02:27:39.345Z”)
。看见如果您想要本地时区中的时间,请转换为
ZoneDateTime
,而不是
LocalDateTime
。对于该日期格式,可以使用
“yyyy-MM-dd'T'HH:MM:ss.SSSz”
“yyyy-MM-dd'T'HH:MM:ss.SSS'Z'
,效果非常好。你能解释一下背后的原因吗。可能添加为答案。
Z
Z
之间的差异已记录在案
'Z'
只是让解析器按照字面意思理解字母。这是否回答了您的问题。还是这个。您不需要指定格式化程序。只需使用
Instant.parse(“2020-11-16T02:27:39.345Z”)
OffsetDateTime.parse(“2020-11-16T02:27:39.345Z”)
。看见如果您想要本地时区中的时间,请转换为
ZoneDateTime
,而不是
LocalDateTime