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
Run Code Online (Sandbox Code Playgroud)
但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
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
无论语言环境如何,这都应该使输出正确.
测试输出:
Mon Jan 11 14:54:22 CET 2016
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |