【问题标题】:Error: "Unable to obtain ZonedDateTime from TemporalAccessor" for format "yyyy-MM-dd hh:mm:ss z"错误:“无法从 TemporalAccessor 获取 ZonedDateTime”,格式为“yyyy-MM-dd hh:mm:ss z”
【发布时间】:2016-12-09 08:24:31
【问题描述】:

我有一个输入数据流,其中包含格式为“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 标记中的类似问题,但找不到该问题的解决方案。

【问题讨论】:

    标签: java zoneddatetime


    【解决方案1】:

    你应该使用 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z"); 而不是使用

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

    所以你的模式中的h 必须是H。根据documentation h 在您定义clock-hour-of-am-pm 时使用,因此您还应该在您的模式中将a 设置为am-pm-of-day,或者只使用H

    【讨论】:

    • 你必须使用大写 HH 而不是使用 hh
    • 知道了 - 非常感谢您发现它!显然 java.time.* 对格式更严格(这很好)。
    猜你喜欢
    • 2022-12-13
    • 2015-11-03
    • 1970-01-01
    • 2019-09-24
    • 2023-03-03
    • 2013-03-21
    • 1970-01-01
    • 2017-07-09
    • 2020-03-07
    相关资源
    最近更新 更多