代码之家  ›  专栏  ›  技术社区  ›  Epaga Alex Reynolds

calendar.getactualMaximum(calendar.week-of-year)怪异

  •  4
  • Epaga Alex Reynolds  · 技术社区  · 16 年前

    或者我不懂这个方法 getActualMaximum(int) 或者是一年中的野外周,或者有一只太阳虫(或者三只都有),有人能给我解释一下为什么(至少 在德国的地方 …)以下代码:

        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 获取实际最大值(int) :

    返回 指定的日历字段可以有, 给定此日历的时间值。 例如,实际最大值 “月份”字段的某些值为12 年,其他年份为13 希伯来日历系统。


    编辑

    情节越来越复杂。 在英语环境中 ( -Duser.language=en -Duser.country=us )输出为:

        max:    52
        actual: 1
    

    似乎是指它是德国地区的太阳虫?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Salandur    16 年前

    此信息正确:

    max:    52
    actual: 53
    

    2010年最多52周。实际周数为53周,自2009年以来最大为53周,大多数周从周日或周一开始。在大多数情况下,第一周是一年中的第一周,1月为4天。由于2010年1月1日的那一周只有2到3天,所以这一周被认为是2009年的一部分。

    最有可能的是,英语地区有不同的规则来决定第1周,就像第一周是1月1日。

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

        2
  •  2
  •   jarnbjo    16 年前

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