为什么YearMonth是Temporal而MonthDay不是Temporal?

时间:2019-06-05 18:23:34

标签: java java.time

为什么'(30 Minutes)'类不是 Temporal (接口),而YearMonth不是临时的?

这似乎很奇怪,因为两个类的含义几乎相同。

我建议不要在使用Temporal接口的任何地方使用MonthDay,但也许有更好的理由。

1 个答案:

答案 0 :(得分:9)

这是阅读MonthDay文档的问题,这要感谢davidxxx和其他人找到正确的报价:

  

此类实现TemporalAccessor而不是Temporal。这是   因为无法定义2月29日有效还是无效   并非没有外部信息,就无法实施   正负。与此相关,MonthDay仅提供对查询的访问   并设置字段MONTH_OF_YEARDAY_OF_MONTH

您可以与Temporal的文档中的这段代码一起阅读:

  

这是日期,时间和偏移量对象的基本接口类型,   足够完整,可以使用加号和减号进行操作。

他们不想为MonthDay定义正负。例如,因为目前尚不清楚2月28日加上1天是什么日子。某些年份是2月29日,其他年份是3月1日。

相比之下,向YearMonth添加一个月或一年总是可以得到明确且毫不奇怪的结果。

链接