将ISO 8601持续时间格式解析为Joda持续时间 - IllegalArgumentException

时间:2016-09-09 12:38:48

标签: java jodatime iso8601

我正在尝试将1个月的ISO 8601持续时间解析为Joda Duration对象。 你能帮我解释为什么这行代码

 Duration duration = Duration.parse("P1M");

引发

java.lang.IllegalArgumentException: Invalid format: "P1M"
at org.joda.time.convert.StringConverter.getDurationMillis(StringConverter.java:111)
at org.joda.time.base.BaseDuration.<init>(BaseDuration.java:105)
at org.joda.time.Duration.<init>(Duration.java:209)
at org.joda.time.Duration.parse(Duration.java:59)

2 个答案:

答案 0 :(得分:5)

在这种情况下,它应该是Period而不是Duration,因为它是一个月,所以请尝试这样做:

Period period = Period.parse("P1M");

确实Duration需要以精确的毫秒数表示,并且由于月份从一个月更改为另一个月,因此无法以毫秒精确表示月份,因此不能为{ {1}}。

有关DurationPeriod here

的更多详情

答案 1 :(得分:1)

Duration用于表示基于时间的时间量,例如秒和纳秒。

要表示基于数据的时间量,您应该考虑使用Period