Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IsPeriodFormat.standard().parsePeriod(“12:00:00”)异常_Java_Jodatime_Periodformatter - Fatal编程技术网

Java IsPeriodFormat.standard().parsePeriod(“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

我尝试使用参数“12:00:00”调用
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进行测试)