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

Parsing ISO 8601 duration format to Joda duration - IllegalArgumentException

我正在尝试将 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)

在这种情况下,它应该是 Period 而不是 Duration,因为它有一个月的时间,所以试试这个:

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

确实 Duration 需要用 精确的毫秒数来表示 并且因为月份从一个月到另一个月的变化而无法用毫秒精确表示它不能是 Duration.

有关 PeriodDuration here

的更多详细信息

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

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