ISOPeriodFormat.standard()。parsePeriod(“12:00:00”)例外

时间:2015-05-28 08:26:38

标签: java jodatime periodformatter

我尝试使用参数“12:00:00”调用parsePeriod(),并运行IllegalArgumentException。 我尝试反编译PeriodFormatter类,getParser().parseInto(localMutablePeriod, paramString, 0, iLocale);此行错误。 任何人都可以告诉我原因吗?感谢。

2 个答案:

答案 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版中测试)。