当前位置: 首页 > 知识库问答 >
问题:

OffsetDateTime:无法从TemporalAccessor获取OffsetDateTime

仰成天
2023-03-14
System.out.println("********************" + OffsetDateTime
    .parse("20140726080320+0400",
        DateTimeFormatter.ofPattern("yyyyMMddHHmmssZ").withChronology(IsoChronology.INSTANCE).withResolverStyle(STRICT))
    .toEpochSecond()); 

我经常遇到这样的异常:

java.time.format.DateTimeParseException: Text '20140726080320+0400' could not be parsed: Unable to obtain OffsetDateTime from TemporalAccessor: {OffsetSeconds=14400, DayOfMonth=26, YearOfEra=2014, MonthOfYear=7},ISO resolved to 08:03:20 of type java.time.format.Parsed
    at java.time.format.Parsed.getLong(Parsed.java:203)
    at java.time.Instant.from(Instant.java:373)
    at java.time.OffsetDateTime.from(OffsetDateTime.java:365)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.OffsetDateTime.parse(OffsetDateTime.java:402)

我做错了什么?

共有1个答案

商宏爽
2023-03-14

格式模式字符串中的yyyy表示纪元的年份。严格来说,2014年可以指公元前2014年(“基督之前”)或公元2014年(“安诺多米尼”)。显然,具有严格解析器样式的格式化程序对象就是这种歧义。

一个解决方案是使用uuu年。这是一个有符号的年份,其中0表示1 BCE,-1表示2 BCE等,因此没有歧义:

    System.out.println("********************"
            + OffsetDateTime.parse("20140726080320+0400",
                                DateTimeFormatter.ofPattern("uuuuMMddHHmmssZ")
                                        .withChronology(IsoChronology.INSTANCE)
                                        .withResolverStyle(STRICT))
                        .toEpochSecond());

这个指纹

 类似资料:
  • 当我这样做的时候 如何解析datetime字符串,以便将其解释为始终来自时区“欧洲/柏林”?

  • 问题内容: 当我这样做时 我得到以下异常: 如何解析日期时间字符串,以便将其始终解释为来自“欧洲/柏林”时区? 问题答案: 问题在于,a 和a 之间存在差异。要创建一个,您需要一个区域偏移量。但是,a和a之间没有一对一的映射关系,因为它实际上取决于当前的夏时制时间。对于ZoneId像“欧洲/柏林”一样的商品,夏季有一个偏移量,而冬季有一个不同的偏移量。 在这种情况下,使用代替会更容易。在解析期间,

  • 我有这段代码: 但我在解析时出现了这个错误:

  • 我有一个以下格式的日期,我需要解析它,并转换成一个纪元时间。 关于我做错了什么有什么帮助吗?

  • 问题内容: 我在将字符串格式化为ZonedDateTime时遇到麻烦。 我的客户希望使用ddMMyyyyhhmmss之类的日期作为日期,而没有分隔符或类似的内容。 这是我到目前为止所做的 当它正确生成字符串时,在创建LocalDateTime变量的解析过程中会发生错误 在SO上搜索,我发现对同一问题的一些答案建议使用LocalDateTime类作为中间类,然后解析为ZonedDateTime,但它

  • 问题内容: 使用Java 1.8.0_51时,以下代码(摘自无法从TemporalAccessor获取OffsetDateTime) 引发异常: 这次我在做什么错? 问题答案: 您忘记设置时间了。 如果将我的答案与代码进行比较,您会注意到唯一的区别是时间信息丢失。一个包含时间信息,并从当前的格式不处理它,实例不能形成即可。 您还可以在包含以下内容的stacktrace中看到它 根据您的需要,您可以