无法解析文本:无法从TemporalAccessor获取LocalDateTime:

时间:2018-04-22 06:02:26

标签: time java-8

我编写了一段简单的代码来解析使用java 8 api的日期。我还经历了关于这个主题的各种其他堆栈溢出问题,但是无法解决错误。

package com.test.java8api;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.util.Locale;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, MM/DD/YYYY - HH:mm", Locale.ENGLISH).withResolverStyle(ResolverStyle.STRICT);
        LocalDateTime date = LocalDateTime.parse("Sun, 04/22/2018 - 09:45",formatter);
        System.out.println(date);
    }

}

错误日志

Exception in thread "main" java.time.format.DateTimeParseException: Text 'Sun, 04/22/2018 - 09:45' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfWeek=7, WeekBasedYear[WeekFields[SUNDAY,1]]=2018, MonthOfYear=4, DayOfYear=22},ISO resolved to 09:45 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at com.test.java8api.Test.main(Test.java:13)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfWeek=7, WeekBasedYear[WeekFields[SUNDAY,1]]=2018, MonthOfYear=4, DayOfYear=22},ISO resolved to 09:45 of type java.time.format.Parsed
    at java.time.LocalDateTime.from(LocalDateTime.java:461)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    ... 2 more
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {DayOfWeek=7, WeekBasedYear[WeekFields[SUNDAY,1]]=2018, MonthOfYear=4, DayOfYear=22},ISO resolved to 09:45 of type java.time.format.Parsed
    at java.time.LocalDate.from(LocalDate.java:368)
    at java.time.LocalDateTime.from(LocalDateTime.java:456)
    ... 4 more

你可以帮我解决一下吗?

编辑:

我被问到是否可能是Unable to obtain LocalDateTime from TemporalAccessor when parsing LocalDateTime (Java 8)

的副本

情况不是这样,因为上述问题讨论了LocalDate和LocalDateTime的使用差异,而当前的问题是使用正确的符号或字母表来表示模式。

1 个答案:

答案 0 :(得分:4)

格式化模式区分大小写

  

" EEE,MM / DD / YYYY - HH:mm"

Read the documentation仔细了解格式化模式代码区分大小写。

  • DD表示每年的日期。 dd表示日期。
  • YYYY表示以周为基础的年份。 yyyy(和uuuu)表示日历年。

在发布到Stack Overflow之前请多加小心。您可能已经在Stack Overflow上发现了数百个工作代码示例,以显示代码中的错误。

提示:避免使用自定义格式,如问题中所示。将日期时间值序列化为文本时,请始终使用标准ISO 8601格式。它们具有惊人的实用性和实用性,旨在明确,易于通过机器解析,并且易于被不同文化的人阅读。

java.time 类在解析/生成字符串时默认使用ISO 8601格式。因此无需指定格式化模式。