8

如标题所述,创建一个java.util.GregorianCalendar对象,比如说日历,然后运行

calendar.getMaximum(Calendar.DAY_OF_WEEK_IN_MONTH)

它返回 6!据我所知,这应该是 5,因为 calendar.getMaximum(Calendar.DAY_OF_MONTH) 等于 31 和 31 / 7 == 4 有余数,即最多有 5 周,因此一天最多可以在一个月内出现 5 次。

我在这里错过了什么吗?

4

3 回答 3

2

javadoc指出:

例如,如果一个月有 31 天,DAY_OF_WEEK_IN_MONTH -1 将与 DAY_OF_WEEK_IN_MONTH 5 和 4 结束重叠。

这承认,最大值可以是 5。为了有一个值为 6 的理由,必须有一个 36 天的月份,即使有日期/时间更正也不应该发生这种情况。至少我还没有发现任何类似检查公历的信息。

所以是的,最大值应该是5。


编辑:我还检查了参考实现的来源,没有理由将值设为 6。

于 2013-05-30T10:10:49.043 回答
1

你是对的,这没有意义。要DAY_OF_WEEK_IN_MONTH成为6,必须有一个包含 6 个星期一的月份(例如)。

于 2013-05-30T09:02:11.147 回答
0

其 6 而不是 5 的原因是因为在英文日历中,一周的开始日是星期日。例如,如果一个月的第一天,假设 7 月 1 日是星期日,那么 7 月 2 日已经是下一周。由于 7 月有 31 天,因此您最终有 6 周。

于 2016-07-01T17:54:01.133 回答