我尝试使用参数“12:00:00”调用parsePeriod()
,并运行IllegalArgumentException。
我尝试反编译PeriodFormatter
类,getParser().parseInto(localMutablePeriod, paramString, 0, iLocale);
此行错误。
任何人都可以告诉我原因吗?感谢。
答案 0 :(得分:1)
“12:00:00”不是正确的ISO 8601持续时间格式。请参阅此处的格式说明:http://en.wikipedia.org/wiki/ISO_8601#Durations
在您的情况下,如果您的意思是持续12小时,则参数应为“PT12H0M0S”:
ISOPeriodFormat.standard().parsePeriod("PT12H0M0S")
答案 1 :(得分:0)
更改输入以使其适应所使用的库的功能通常不是一种选择。请注意,您的输入不兼容ISO,因为它至少缺少前缀PT(在替代ISO-8601表示法中)。因此,我建议采取以下方式:
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版中测试)。