Java IsPeriodFormat.standard().parsePeriod(“12:00:00”)异常
我尝试使用参数“12:00:00”调用Java IsPeriodFormat.standard().parsePeriod(“12:00:00”)异常,java,jodatime,periodformatter,Java,Jodatime,Periodformatter,我尝试使用参数“12:00:00”调用parsePeriod(),它运行一个IllegalArgumentException。 我尝试反编译PeriodFormatter类和getParser()这一行出错了。 有人能告诉我原因吗?谢谢。“12:00:00”不是正确的ISO 8601持续时间格式。请参见此处的格式说明: 在您的情况下,如果您是指12小时的持续时间,则参数应为“PT12H0M0S”: ISOPeriodFormat.standard().parsePeriod(“PT12H0M0S
parsePeriod()
,它运行一个IllegalArgumentException。
我尝试反编译PeriodFormatter
类和getParser()代码>这一行出错了。
有人能告诉我原因吗?谢谢。“12:00:00”不是正确的ISO 8601持续时间格式。请参见此处的格式说明:
在您的情况下,如果您是指12小时的持续时间,则参数应为“PT12H0M0S”:
ISOPeriodFormat.standard().parsePeriod(“PT12H0M0S”)
更改输入以使其适应所用库的功能通常不是一个选项。请注意,您的输入不兼容ISO,因为它至少缺少前缀PT(在替代ISO-8601-notation中)。因此,我建议采取以下方式:
PeriodFormatter pf =
new PeriodFormatterBuilder()
.appendHours().appendLiteral(":")
.appendMinutes().appendLiteral(":")
.appendSeconds().toFormatter();
System.out.println(pf.parsePeriod("12:00:00")); // PT12H
或者,我已经测试了这段代码:
ISOPeriodFormat.alternateExtended().parsePeriod("P0000-00-00T12:00:00");
到目前为止,这是可行的,只需要在输入前加上前缀,缺点是必须更改输入。较短的前缀PT也是ISO兼容的,但Joda Time(在版本2.1中测试)不支持它。IsPeriodFormat.alternateExtended().parsePeriod(“P0000-00-00T12:00:00”)
可以工作,但不能IsPeriodFormat.alternateExtended().parsePeriod(“PT12:00:00”)
。(使用Joda Time 2.1进行测试)