我确定我只是在这里遗漏了一些东西,但它一直在躲避我。
为什么 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);
然后“weekNumber”为 1,而我预计它为 53。
如果我改用 WeekFields.ISO
,我得到 53;然而,ISO 的定义是它使用星期一作为一周的开始,这在我正在处理的情况下是不正确的,我不确定 future 仅使用 ISO 而不是 SUNDAY_START 的后果。
我错过了什么?
答案
根据下面的评论(感谢 Basil 和 Andreas),我确实误读了 Oracle 文档,其中指出:
定义为从星期日开始并且一个月中至少有 1 天。
“一个月中至少有 1 天”是让我在新年的背景下陷入循环的部分。
根据下面的说明,很明显,由于 2021 年 1 月 1 日是星期五,而 SUNDAY_START 周从星期日开始,因此在这种情况下,本周实际上是第 1 周。
动机
我最初问这个问题是为了更好地理解 SUNDAY_START。这样做的动机是找到一种方法来重新创建 MySQL 的 WEEK()“模式 6”(即,一周的星期日开始,第一周是今年有 4 天或更多天的第一周)。
我忘记了创建自定义周字段的功能,该字段具有指定的开始日期和该月中包含的最少天数。
不过,我还是很感激能消除我对 SUNDAY_START 的 Javadoc 的误解,我希望这篇文章对以后的人有用。
感谢大家的评论和回答,对于最初的任何困惑,我深表歉意。
最佳答案
https://savvytime.com/week-number是错误的。
当你显示 Country: United States
, Year: 2020
时,它显示:
Week 53 December 27, 2020 January 2, 2021 Current Week
当你显示 Country: United States
, Year: 2021
时,它显示:
Week 1 December 27, 2020 January 2, 2021 Current Week
第 53 周和第 1 周怎么可能是同一个日期范围?它不能。该网站已损坏。
更新: 来自评论:
needing a Java datetime "equivalent" of MySQL's
WEEK()
function using mode 6
这很简单。模式 6 定义为:
所以你得到一个 WeekFields
:
WeekFields weekMode6 = WeekFields.of(/*firstDayOfWeek=*/DayOfWeek.SUNDAY,
/*minimalDaysInFirstWeek=*/4);
作为引用,两个预定义的 WeekFields
实例定义为:
ISO = new WeekFields(DayOfWeek.MONDAY, 4);
SUNDAY_START = WeekFields.of(DayOfWeek.SUNDAY, 1);
关于java - 在 java.time 中,为什么 WeekFields.SUNDAY_START 会为 2020-12-29 生成周数 1 而不是 53?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65499411/
相关文章:
swift - 如何在 SwiftUI 上启用核心数据加密?
angular - 引用错误 : Can't find variable: globalThis
python - 如何从 Python 字典中的键中删除尾随空格?
java - 问题启动 Cassandra。 Java 运行时环境 : 检测到 fatal erro
aws-cloudformation - AWS Proton 与 CloudFormation
python - 模块未找到错误 : No module named 'psycopg2' in i