为什么期间不可比较

时间:2016-02-04 04:00:38

标签: java date comparison

为什么java.time.Period没有实现java.lang.Comparable接口?

简单的问题,但答案可能不那么简单:其他常用的时间量java.time.Duration 确实实现Comparable,所以我假设设计师可能会想到关于它,但决定反对它。

1 个答案:

答案 0 :(得分:10)

因为只有几个月可以是normalized(),而不是几天。即P30D可能小于,等于或大于P1M,具体取决于它是否应用于例如1月,2月或3月。

实际上,equals没有进行任何规范化,因此P30D不等于P1M。即使P1Y不等于P12M,也可能会令人惊讶。

如果你需要比较句号,你需要一种方法来处理 - 在某些情况下 - 你无法决定。或者您使用30天的标准月份,这是财务计算中的常见简化。

顺便说一句:这应该属于Period#normalized()的JavaDoc。