【问题标题】:OffsetTime.parse causes an exception with ISO_TIME formatterOffsetTime.parse 导致 ISO_TIME 格式化程序异常
【发布时间】:2020-07-03 15:51:18
【问题描述】:

我正在尝试使用 ISO_TIME 格式化程序在 LocalTime 和字符串之间进行转换,但出现异常。我的代码是这样的:

        LocalTime some_time = LocalTime.of( 10, 10, 10 );
        String time_format = some_time.format(DateTimeFormatter.ISO_TIME);
        System.out.println(OffsetTime.parse(time_format, DateTimeFormatter.ISO_TIME ));

最后一行抛出异常:

Exception in thread "main" java.time.format.DateTimeParseException: Text '10:10:10' could not be parsed: Unable to obtain OffsetTime from TemporalAccessor: {},ISO resolved to 10:10:10 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.OffsetTime.parse(OffsetTime.java:327)

为什么会发生这种情况,我该如何解决这个问题?

提前感谢您的帮助, 阿纳斯

【问题讨论】:

  • 你想要OffsetTime 做什么?出于好奇而询问,因为虽然我用过一次,但我通常很难弄清楚它是否有任何好的和有意义的用途。
  • 实际上,我使用它只是因为我必须为一个我无法控制其签名并且它需要 OffsetTime 的方法提供一个参数

标签: java time-format


【解决方案1】:

之所以发生这种情况,是因为它就在名称中。 OffsetTime 既包含实际时间(例如“午夜后 5 分钟”),也包含区域偏移量,例如“+01.00”。 (例如,在当前比 UTC 时间晚 1 小时的某些位置,例如冬季的欧洲大陆)。

相比之下,LocalTime 只包含实际时间,而不是偏移量。

因此,无法从本地时间(无论是字符串形式还是 LocalTime 对象)转换为 OffsetTime; OffsetTime 不知道你想要哪个偏移量。

你可以这样做:

LocalTime time = LocalTime.parse("10:10:10", DateTimeFormatter.ISO_TIME);
OffsetTime atPlus1 = time.atOffset(ZoneOffset.ofHours(+1));

这里你从字符串中获取时间,然后以编程方式设置偏移量。

让我再说一遍:字符串10:10:10 从根本上说不是偏移时间。您可以将该字符串转换为偏移时间,也可以将苹果转换为香蕉。

【讨论】:

    猜你喜欢
    • 2018-01-23
    • 2010-12-31
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多