我确信我在这里错过了一些东西,但它仍然让我困惑。
为什么 SUNDAY_START 生成的 2020 年 12 月 29 日周数为 1,而不是 53?
是因为我误解了 Oracle 文档的内容吗?或者我还错过了什么?
细节
转到https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/temporal/WeekFields.html#SUNDAY_START显示 SUNDAY_START 似乎遵循与上述相同的规则。如果我使用下面的代码...
ZonedDateTime zdt = ZonedDateTime.ofInstant(/* representation of Dec. 29, 2020 */, ZoneId.of("UTC"));
TemporalField wn = WeekFields.SUNDAY_START.weekOfWeekBasedYear();
int weekNumber = zdt.get(wn);
Run Code Online (Sandbox Code Playgroud)
那么“weekNumber”是 1,而我预计它是 53。
如果我使用WeekFields.ISO改为使用,我会得到 53;然而,ISO 的定义是它使用星期一作为一周的开始,这在我正在处理的情况下是不正确的,并且我不确定仅使用 ISO 而不是 SUNDAY_START 的未来后果。
我缺少什么?
答案
根据下面的评论(感谢 Basil 和 Andreas),我确实误读了 Oracle 文档,其中指出:
Defined as starting on Sunday and with a minimum of 1 day in the month.
“每月至少一天”是让我在新的一年中陷入困境的部分。
通过以下说明,可以清楚地看出,由于 2021 年 1 …