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 版中测试)。
我尝试使用参数“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 版中测试)。