小编Bty*_*jor的帖子

在 java.time 中,为什么 WeekFields.SUNDAY_START 为 2020-12-29 生成的周数为 1,而不是 53?

我确信我在这里错过了一些东西,但它仍然让我困惑。

为什么 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 …

java datetime

2
推荐指数
1
解决办法
886
查看次数

标签 统计

datetime ×1

java ×1