Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)很奇怪

时间:2010-01-12 08:45:56

标签: java calendar week-number

要么我不理解方法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?

2 个答案:

答案 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对象没有年份的字段,与周数相关。