Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)很奇怪

Epa*_*aga 4 java calendar week-number

要么我不理解方法getActualMaximum(int)或字段WEEK_OF_YEAR,要么涉及到Sun漏洞(或全部三个)......有人可以向我解释为什么(至少在德语区域设置中 ......)以下代码:

    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 ));
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

    max:    52
    actual: 53
Run Code Online (Sandbox Code Playgroud)

这是Javadoc getActualMaximum(int):

给定此Calendar的时间值,返回指定日历字段可能具有的最大值.例如,MONTH字段的实际最大值在某些年份为12,在希伯来日历系统中为其他年份的13.


编辑

情节变粗.在英语语言环境(-Duser.language=en -Duser.country=us)中,输出为:

    max:    52
    actual: 1
Run Code Online (Sandbox Code Playgroud)

似乎指出它是德国语言环境的Sun bug?

Sal*_*dur 5

这些信息是正确的:

max:    52
actual: 53
Run Code Online (Sandbox Code Playgroud)

2010年最多为52周.实际的一周是53,自2009年以来最多53周,大多数星期从星期日或星期一开始.大多数情况下,第1周是一年中的第一周,1月份是4天.由于2010年1月1日的一周只有2或3天,因此本周被视为2009年的一部分.

很可能英语语言环境有不同的规则来确定第1周,就像第一周是1月1日这一周.

维基百科正确解释:维基百科周文章