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

错误:“无法从TemporalAccessor获取ZonedDateTime”,格式为“yyyy-mm-dd hh:mm:ss z”

公冶浩慨
2023-03-14

我有一个数据输入流,它包含格式为“yyyy-mm-dd hh:mm:ss z”的日期,其中需要在进一步传播日期时保留时区。下面是测试程序(带有错误堆栈)--我的解决方案有什么问题?

public class Test {

public static void main(String[] args) {
    try {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
        ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
        System.out.println(zdt);
    } catch (Exception e) {
        System.err.println("Exception in 1st approach: " + e.getMessage());
    }

    try {
        DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd hh:mm:ss z").toFormatter();
        ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
        System.out.println(zdt);
    } catch (Exception e) {
        System.err.println("Exception in 2nd approach: " + e.getMessage());
    }
  }
}

输出(异常消息):

第一种方法中的异常:无法解析文本“2016-12-09 09:30:21 UTC”:无法从TemporalAccessor获取ZonedDateTime:{HourofamPM=9,MinuteOfHour=30,MicroofSecond=0,SecondofMinute=21,nanoofSecond=0,MilliofSecond=0},ISO,UTC解析为2016-12-09,类型为java.time.format.Parsed

第二种方法中的异常:无法分析文本“2016-12-09 09:30:21 UTC”:无法从TemporalAccessor获取ZonedDateTime:{HourofamPM=9,MinuteOfHour=30,MicroofSecond=0,SecondofMinute=21,nanoofSecond=0,MilliofSecond=0},ISO,UTC解析为2016-12-09,类型为java.time.format.Parsed

JDK版本1.8.0_111

我读过zoneddatetime标签中的类似问题,但找不到解决问题的方法。

共有1个答案

濮金鑫
2023-03-14

您应该使用DateTimeFormatter dtf=DateTimeFormatter.ofPattern(“yyyy-mm-dd hh:mm:ss z”);而不是使用

  DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");

因此模式中的h必须是h。根据文档,在定义clock-hour-of-am-pm时使用h,因此在您的模式中还应该将a作为am-pm-of-day,或者只使用h

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

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

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

  • 问题内容: 我最近迁移到Java 8,希望能够更轻松地处理本地时间和分区时间。 但是,我认为在解析一个简单的日期时,我面临着一个简单的问题。 就我而言: fecha是‘15 / 06/2014’ ConstantesFechas.FORMATO_DIA为“ dd / MM / yyyy” obtenerZonaHorariaServidor返回ZoneId.systemDefault() 因此,这

  • 我最近转到Java8,希望能更容易地处理本地和分区时间。 然而,在我看来,在解析一个简单的日期时,我面临着一个简单的问题。 null 这是一个简单的例子。但是,解析会抛出以下异常: java.time.format.DateTimeParseException:无法分析文本“15/06/2014”:无法从TemporalAccessor获取ZonedDateTime:{},ISO解析为类型java

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