ISO-8601标准规定了这一点
"一年的第一周是包含一年中第一个星期四的一周(因此,总是包含1月4日)."
这意味着一年中的第一周不是包含1月1日的那一周,而是包含在新年四天的第一个星期.
根据周一,2016年1月11日是第2周.以下是2016年的周数列表.
Ubuntu在其时间小部件中反映出:
而且cal命令也有:
Oracle使用"iw"参数支持它TO_CHAR
:
> 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