要么我不理解方法getActualMaximum(int)
或字段WEEK_OF_YEAR,要么涉及到Sun bug(或全部三个)......有人可以向我解释原因(至少 in a German locale ...)以下代码:
Locale.setDefault( Locale.GERMAN );
Calendar c = Calendar.getInstance();
c.set( Calendar.YEAR, 2010 );
c.set( Calendar.MONTH, 0 );
c.set( Calendar.DAY_OF_MONTH, 1 );
System.out.println("max: "+c.getActualMaximum( Calendar.WEEK_OF_YEAR ));
System.out.println("actual: "+c.get( Calendar.WEEK_OF_YEAR ));
产生以下输出:
max: 52
actual: 53
这是getActualMaximum(int)
的Javadoc:
返回最大值 指定的日历字段可以有, 给定此日历的时间值。 例如,实际的最大值 一些人的MONTH字段是12 年,和其他年份的13年 希伯来日历系统。
修改
情节变浓。 在英语区域设置(-Duser.language=en -Duser.country=us
)中,输出为:
max: 52
actual: 1
似乎指出它是德国语言环境的Sun bug?
答案 0 :(得分:5)
此信息是正确的:
max: 52
actual: 53
2010年最多有52周。实际的一周是53,自2009年以来最多53周,大多数星期从星期日或星期一开始。大多数情况下,第1周是一年中的第一周,1月份是4天。由于2010年1月1日的一周只有2或3天,因此本周被视为2009年的一部分。
英语区域很可能在确定第1周时有不同的规则,就像第一周是1月1日这一周。
维基百科正确解释:wikipedia week article
答案 1 :(得分:2)
问题是,2010年1月1日是在2009年的第53周(德国),但2010年只有52周(2010年12月31日是第52周)。遗憾的是,Java Calendar对象没有年份的字段,与周数相关。