OffsetTime.parse 导致 ISO_TIME 格式化程序异常
OffsetTime.parse causes an exception with ISO_TIME formatter
我正在尝试使用 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
包含实际时间(例如“午夜过后 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
根本不是偏移时间。您可以将该字符串转换为偏移时间,也可以将苹果转换为香蕉。
我正在尝试使用 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
包含实际时间(例如“午夜过后 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
根本不是偏移时间。您可以将该字符串转换为偏移时间,也可以将苹果转换为香蕉。