Java OffsetTime.parse导致ISO_时间格式化程序出现异常

Java OffsetTime.parse导致ISO_时间格式化程序出现异常,java,time-format,Java,Time Format,我试图使用ISO_时间格式化程序在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, DateTi

我试图使用ISO_时间格式化程序在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
既包含实际时间(如“午夜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
基本上不是偏移时间。您可以将该字符串转换为偏移时间,也可以将苹果转换为香蕉。

您想要偏移时间做什么?出于好奇而问,因为虽然我用过一次,但我通常很难弄清楚它是否有什么好的和有意义的用途。实际上,我使用它只是因为我必须为一个方法提供一个参数,我无法控制它的签名,它需要额外的时间