错误:格式"yyyy-MM-dd hh:mm:ss z" "Unable to obtain ZonedDateTime from TemporalAccessor"



i具有包含格式日期的数据流" 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'不可能是 解析:无法从teermalaccessor获得ZonedDateTime: {hourofampm = 9,分钟小时= 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'不可能是 解析:无法从teermalaccessor获得ZonedDateTime: {hourofampm = 9,分钟小时= 30,microofsecond = 0,secondofminute = 21, nanoofsecond = 0,milliofsecond = 0},ISO,UTC已解决至2016-12-09 键入java.time.format.parsed

JDK版本1.8.0_111

我已经在Zoneddateetime标签中读了类似的问题,但找不到解决方案。

您应该使用 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,因此您还应在PATERN中将a作为CC_6,或者仅使用H

相关内容

最新更新