问题

ISO-8601标准规定:

“一年的第一个星期是第一个星期四 年份(因此,总包括1月4日)。”

也就是说,这一年的第一个星期并不包含1月1日,而是第一个星期包含在新年的四天之内。

对于那个孟邦,2016年1月11日在第2周.这是2016年的一个星期数字列表.

Ubuntu在其时间小部件中反映了这一点:

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说Mon,2016年1月11日是第三周

 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日的第一周.

- 有没有办法使用ISO-8601-copliant周编号?

  最佳答案

正如我在评论中指出的,默认行为是特定于语言环境的.有些地方将给出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
 

  相同标签的其他问题

javadateiso