为什么YearMonth类不是临时的(接口),而MonthDay不是临时的?

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

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

最佳答案

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

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

您可以从Temporal的文档中结合以下代码阅读:

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

他们不想为MonthDay定义加号和减号。因为例如不清楚2月28日加1天是什么。某些年份是2月29日,其他年份是3月1日。

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

链接

  • Documentation of Temporal
  • Documentation of MonthDay
  • 10-07 13:11