我可能不理解方法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