Задача календаря Java, JDK 1.6.0.22 - PullRequest
4 голосов
/ 28 декабря 2010

У меня проблема с получением недели года.На моей машине установлена ​​версия JDK 1.6.0.22, на другой машине 1.6.0.21.И обе машины дают разные результаты:

(1.6.0.22) неделя равна: 1(1.6.0.21) неделя составляет: 52

Для этого кода:

      try {
         Calendar current = new GregorianCalendar();
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
         Date d = df.parse("2010-12-28 19:04:38 GMT");
         current.setTime(d);
         int currentWeek = current.get(Calendar.WEEK_OF_YEAR);
         System.out.println("week is: "currentWeek);
      } catch (ParseException e) {
        e.printStackTrace();
      }

Почему JDK 1.6.0.22 дает неправильный результат?

Ответы [ 2 ]

9 голосов
/ 28 декабря 2010

Этот отрывок из документации API объясняет, почему может возникнуть такая разница:

Значения, рассчитанные для WEEK_OF_YEAR диапазон полей от 1 до 53. Неделя 1 для год - самый ранний семидневный период начиная с getFirstDayOfWeek (), содержит как минимум getMinimalDaysInFirstWeek () дней с в этом году. Таким образом, это зависит от значения getMinimalDaysInFirstWeek (), getFirstDayOfWeek () и день 1 января.

А из исходного кода Calendar:

И firstDayOfWeek, и minimalDaysInFirstWeek зависят от локали.

То есть это определяет локаль, а не часовой пояс! По-видимому, в некоторых локалях неделя 1 года начинается с предыдущего года. Попробуйте запустить это:

    Calendar cal = new GregorianCalendar();
    System.out.println(Locale.getDefault());
    System.out.println(cal.getMinimalDaysInFirstWeek());
    System.out.println(cal.getFirstDayOfWeek());

Могу поспорить, что либо вы используете разные версии в разных локалях, либо данные локали менялись между этими версиями. Результат «1» может быть даже более правильным и из-за ошибки в данных локали.

1 голос
/ 01 января 2011

Не используйте классы даты / времени JDK - используйте Время JODA .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...