4

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

产生以下输出:

    max:    52
    actual: 53

这是Javadoc getActualMaximum(int)

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


编辑

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

    max:    52
    actual: 1

似乎指向它是德国语言环境的 Sun 错误?

4

2 回答 2

5

这个信息是正确的:

max:    52
actual: 53

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

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

维基百科正确解释:维基百科周刊

于 2010-01-12T09:47:02.510 回答
2

问题是,2010 年 1 月 1 日是 2009 年的第 53 周(在德国),但 2010 年只有 52 周(2010 年 12 月 31 日是第 52 周)。不幸的是,Java Calendar 对象没有与周数相关的年份字段。

于 2010-01-12T09:49:35.857 回答