如标题所述,创建一个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 次。
我在这里错过了什么吗?
javadoc指出:
例如,如果一个月有 31 天,DAY_OF_WEEK_IN_MONTH -1 将与 DAY_OF_WEEK_IN_MONTH 5 和 4 结束重叠。
这承认,最大值可以是 5。为了有一个值为 6 的理由,必须有一个 36 天的月份,即使有日期/时间更正也不应该发生这种情况。至少我还没有发现任何类似检查公历的信息。
所以是的,最大值应该是5。
编辑:我还检查了参考实现的来源,没有理由将值设为 6。
你是对的,这没有意义。要DAY_OF_WEEK_IN_MONTH
成为6
,必须有一个包含 6 个星期一的月份(例如)。
其 6 而不是 5 的原因是因为在英文日历中,一周的开始日是星期日。例如,如果一个月的第一天,假设 7 月 1 日是星期日,那么 7 月 2 日已经是下一周。由于 7 月有 31 天,因此您最终有 6 周。