【发布时间】:2016-04-15 20:21:33
【问题描述】:
ISO-8601 标准规定
"一年的第一周是包含第一个星期四的那一周 年(因此,总是包含 1 月 4 日)。”
意思是一年的第一周不是包含 1 月 1 日的那一周,而是包含至少四天到新年的第一周。
根据那个星期一,2016 年 1 月 11 日是第 2 周。 Here is a list of week numbers for 2016.
Ubuntu 在其时间小部件中反映了这一点:
cal 命令也可以:
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 的周编号?
【问题讨论】:
-
这是特定于语言环境的。例如,将默认的
Locale设置为Locale.UK会给出正确的星期,2。 -
但这会改变周数之外的其他内容!
-
是的,请参阅下面的答案以获得更好的方法。 :-)