首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >java.time.format.DateTimeParseException at LocalDateTime.parse

java.time.format.DateTimeParseException at LocalDateTime.parse
EN

Stack Overflow用户
提问于 2018-03-02 09:30:03
回答 2查看 2.8K关注 0票数 2

为什么下面的代码:

代码语言:javascript
代码运行次数:0
运行
复制
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TestProject {

    public static void main(String[] args) {
        String dateString = "2018-03-01T14:52:48Z";
        DateTimeFormatter dtf = DateTimeFormatter.ISO_INSTANT;
        LocalDateTime localDateTime = LocalDateTime.parse(dateString, dtf);
    }
}

投掷:

代码语言:javascript
代码运行次数:0
运行
复制
Exception in thread "main" java.time.format.DateTimeParseException: Text '2018-03-01T14:52:48Z' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1959)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1894)
    at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at org.bdshadow.TestProject.main(TestProject.java:11)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.LocalDateTime.from(LocalDateTime.java:461)
    at java.base/java.time.format.Parsed.query(Parsed.java:235)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)
    ... 2 more
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {NanoOfSecond=0, InstantSeconds=1519915968, MilliOfSecond=0, MicroOfSecond=0},ISO of type java.time.format.Parsed
    at java.base/java.time.LocalDate.from(LocalDate.java:396)
    at java.base/java.time.LocalDateTime.from(LocalDateTime.java:456)
    ... 4 more

日期的字符串表示形式完全类似于DateTimeFormatter.ISO_INSTANTINSTANT的javadocs。而且它在java 9:INSTANT中没有改变

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-02 09:36:45

我相信这是因为ISO_INSTANT是用来解析Instant

正如javadoc所述:

这是一个特殊的案例格式化程序,旨在允许人类可读形式的java.time.Instant

此代码适用于:

代码语言:javascript
代码运行次数:0
运行
复制
    String dateString = "2018-03-01T14:52:48Z";
    DateTimeFormatter dtf = DateTimeFormatter.ISO_INSTANT;
    Instant instant = Instant.from(dtf.parse(dateString));

要使它成为本地时间,您可以使用以下命令:

代码语言:javascript
代码运行次数:0
运行
复制
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault())

这是对这些错误的一个很好的解释:Java SE 8 TemporalAccessor.from issues when used with a java.time.Instant object

票数 6
EN

Stack Overflow用户

发布于 2018-03-02 09:36:31

LocalDateTime不使用t contain Zone in self. If you need parse string with zone useZonedDateTime`:

代码语言:javascript
代码运行次数:0
运行
复制
DateTimeFormatter dtf = DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.systemDefault());
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, dtf);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49066258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档