Calendar.getActualMaximum (Calendar.WEEK_OF_YEAR) странность - PullRequest
4 голосов
/ 12 января 2010

Либо я не понимаю метод 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):

Возвращает максимальное значение, которое указанное поле календаря может иметь, учитывая значение времени этого календаря. Например, фактическое максимальное значение поля МЕСЯЦ 12 в некоторых лет и 13 в другие годы в Еврейская календарная система.


Редактировать

Сюжет утолщается. В английском языке (-Duser.language=en -Duser.country=us) вывод:

    max:    52
    actual: 1

Кажется, указывает на то, что это ошибка солнца для немецких локалей?

Ответы [ 2 ]

5 голосов
/ 12 января 2010

Эта информация верна:

max:    52
actual: 53

В 2010 году максимум 52 недели. Фактическая неделя - 53, с 2009 года - максимум 53 недели, и большинство недель начинаются в воскресенье или понедельник. Неделя 1 в большинстве случаев первая неделя года с 4 днями в январе. Поскольку в неделе 1 января в 2010 году было только 2 или 3 дня, эта неделя считается частью 2009 года.

Скорее всего, в английском языке есть разные правила определения недели 1, например, первая неделя - неделя 1 января.

Википедия объясняет это правильно: Статья на неделе википедии

2 голосов
/ 12 января 2010

Проблема в том, что 1 января 2010 года на 53 неделе 2009 года (в Германии), но в 2010 году только 52 недели (31 декабря 2010 года на 52 неделе). К сожалению, у объекта Java Calendar нет поля для года, к которому относится номер недели.

...