为什么 Period 不可比较

Why is Period not Comparable

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

简单的问题,但答案可能不那么简单:另一个常用的时间量 java.time.Duration does 实现 Comparable,所以我假设设计师可能会考虑过,但决定不这样做。

因为只有月可以 normalized(),而不是天。 IE。 P30D 可能小于、等于或大于 P1M,具体取决于它是应用于一月、二月还是三月。

实际上,equals 没有做任何归一化,所以 P30D 不等于 P1M。甚至 P1Y 也不等于 P12M,这可能令人惊讶。

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

顺便说一句:这确实应该在 Period#normalized() 的 JavaDoc 中。