Java 为什么YearMonth是临时的而MonthDay不是临时的?

Java 为什么YearMonth是临时的而MonthDay不是临时的?,java,java-time,Java,Java Time,为什么YearMonth类是临时的(接口),而MonthDay不是临时的 这似乎很奇怪,因为这两个类的含义几乎相同 我可能会建议MonthDay从不在使用临时接口的任何地方使用,但可能有更好的理由。这是阅读MonthDay的文档的问题,感谢davidxxx和其他人找到正确的引用: 此类实现了TemporalAccessor,而不是Temporal。这是 因为无法确定2月29日是否有效 没有外部信息,就无法实施 正/负。与此相关,MonthDay仅提供对查询的访问 并设置字段年的月和月的日 您可以

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

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


我可能会建议MonthDay从不在使用临时接口的任何地方使用,但可能有更好的理由。

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

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

您可以结合
Temporal
文档中的这段代码来阅读:

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

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

相比之下,将一个月或一年添加到
YearMonth
中总是会得到一个定义明确且不令人惊讶的结果

链接


这在文档中没有明确出现,但您的猜测听起来非常正确/@davidxxx它确实说明了
MonthDay
:“虽然组合是连续的,从几天到几月,但组合没有足够的信息来定义月日的有效值范围。”,我只引用了文件中的一段话,但在这一点上并不是详尽无遗的。这一点在
MonthDay
中也有详细说明。我用它更新了。