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

sta*_*low 3 java iso8601 jodatime

我试图将1个月的ISO 8601持续时间解析为Joda Duration对象.你能帮我解释一下为什么这行代码

 Duration duration = Duration.parse("P1M");
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Nic*_*tto 5

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

Period period = Period.parse("P1M");
Run Code Online (Sandbox Code Playgroud)

实际上,Duration需要以精确的毫秒数表示,并且由于月份从一个月变为另一个月,因此不能以毫秒精确表示,因此不能是a Duration.

关于Period这里的更多细节Duration