gpt4 book ai didi

Java 日历 WEEK_OF_YEAR 不符合 ISO-8601 标准?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:24 28 4
gpt4 key购买 nike

ISO-8601 标准指出

"The first week of a year is the week that contains the first Thursday of the year (and, hence, always contains 4 January)."

这意味着一年的第一周不是包含 1 月 1 日的那一周,而是包含新的一年至少四天的第一周。

根据那个星期一,2016 年 1 月 11 日是第 2 周。 Here is a list of week numbers for 2016.

Ubuntu 在它的时间部件中反射(reflect)了这一点:

enter image description here

并且 cal 命令还执行:

enter image description here

Oracle 通过 TO_CHAR 的“iw”参数支持它:

> select to_char(to_date('11/01/2016','dd/mm/yyyy'),'iw') weekno from dual;
> WEEKNO
02

但是 Java 说 2016 年 1 月 11 日星期一是第 3 周

Calendar c = Calendar.getInstance();
System.out.println(c.getTime());
System.out.println(c.get(Calendar.WEEK_OF_YEAR));

Output:
Mon Jan 11 09:02:35 VET 2016
3

Java 认为一年中的第一周是 1 月 1 日。

- Java 有没有办法使用符合 ISO-8601 标准的周编号?

最佳答案

正如我在评论中指出的那样,默认行为 是特定于语言环境的。有些语言环境会给出 3,有些会给出 2。

幸运的是,对于给定的 Calendar,您可以指定一年中第一周必须出现的天数。正如您在上面所写,对于 ISO 8601,此数字为 4,因此以下代码应该有效:

Calendar c = Calendar.getInstance();
c.setMinimalDaysInFirstWeek(4); // For ISO 8601
System.out.println(c.getTime());
System.out.println(c.get(Calendar.WEEK_OF_YEAR));

无论语言环境如何,这都应该使输出正确。

测试输出:

Mon Jan 11 14:54:22 CET 2016
2

关于Java 日历 WEEK_OF_YEAR 不符合 ISO-8601 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34722997/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com