当前位置:  开发笔记 > 编程语言 > 正文

Java Calendar WEEK_OF_YEAR不符合ISO-8601标准?

如何解决《JavaCalendarWEEK_OF_YEAR不符合ISO-8601标准?》经验,为你挑选了1个好方法。

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标准的周编号?



1> haraldK..:

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

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有