为什么 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 中。
为什么java.time.Period
没有实现java.lang.Comparable
接口?
简单的问题,但答案可能不那么简单:另一个常用的时间量 java.time.Duration
does 实现 Comparable
,所以我假设设计师可能会考虑过,但决定不这样做。
因为只有月可以 normalized()
,而不是天。 IE。 P30D
可能小于、等于或大于 P1M
,具体取决于它是应用于一月、二月还是三月。
实际上,equals
没有做任何归一化,所以 P30D
不等于 P1M
。甚至 P1Y
也不等于 P12M
,这可能令人惊讶。
如果您需要比较期间,则需要一种方法来处理——在某些情况下——你无法决定。或者您使用 30 天的标准月份,这是财务计算中的常见简化。
顺便说一句:这确实应该在 Period
和 #normalized()
的 JavaDoc 中。