要么我不明白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
返回指定日历字段可能具有的最大值,给定此日历的时间值。例如,月份字段的实际最大值在某些年份为12,在希伯来日历系统中为13。
编辑
情节更复杂了。In a English locale (-Duser.language=en -Duser.country=us)输出是:
max: 52
actual: 1似乎指的是德国地区的太阳虫?
发布于 2010-01-12 09:47:02
这一信息是正确的:
max: 52
actual: 532010年最多有52周。实际周数是53周,因为2009年最多有53周,而大多数周是周日或周一开始的。在大多数情况下,第一周是一年中的第一周,一月有4天。由于1月1日的一周在2010年只有2到3天,所以这一周被认为是2009年的一部分。
最有可能的是,英国地区对于确定第一周有不同的规则,就像第一周是1月1日的第一周一样。
维基百科正确地解释了它:维基百科周刊文章
发布于 2010-01-12 09:49:35
问题是,2010年1月1日是2009年的第53周(在德国),但2010年只有52周(12月31日是第52周)。遗憾的是,Java对象没有与周号相关的年份字段。
https://stackoverflow.com/questions/2047673
复制相似问题