我可能不理解方法getActualMaximum(int)或字段WEEK_OF_YEAR,或者涉及到一个Sun bug(或全部三个)...有人可以向我解释以下代码的原因(至少在德语语言环境中为 ...)。 :

    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?

最佳答案

此信息是正确的:

max:    52
actual: 53

2010年最长为52周。实际的一周为53,因为2009年最多为53周,并且大多数周从星期日或星期一开始。在大多数情况下,第1周是一年的第一周,一月为4天。由于2010年1月1日这一周只有2或3天,因此该周被视为2009年的一部分。

英语语言环境很可能有不同的规则来确定第1周,例如第一周是1月1日。

维基百科正确地解释了它:wikipedia week article

09-26 21:24