ISOPeriodFormat.standard().parsePeriod("12:00:00") 异常

ISOPeriodFormat.standard().parsePeriod("12:00:00") Exception

我尝试使用参数“12:00:00”调用 parsePeriod(),它运行 IllegalArgumentException。 我尝试反编译 PeriodFormatter class 和 getParser().parseInto(localMutablePeriod, paramString, 0, iLocale); 这行错误。 谁能告诉我原因?谢谢

“12:00:00”不是正确的 ISO 8601 持续时间格式。请参阅此处的格式说明:http://en.wikipedia.org/wiki/ISO_8601#Durations

在您的情况下,如果您指的是 12 小时的持续时间,则参数应为 "PT12H0M0S": ISOPeriodFormat.standard().parsePeriod("PT12H0M0S")

更改输入以使其适应正在使用的库的功能通常不是一种选择。请注意,您的输入与 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 版中测试)。