что делает объект Календарь? - PullRequest
1 голос
/ 07 июля 2011

У меня был тест на объект Календарь:

for (int i = 0; i < 11; i++)
            System.out.println(calendar.get(i));


output:
1
2011
6
28
2
6
187
4
1
1
10

Мой вопрос: как это может произойти?Есть также те же хитрые проблемы для API calendar.get ()

Ответы [ 4 ]

4 голосов
/ 07 июля 2011

In Calendar.get(i) i представляет собой такие поля, как ERA, YEAR, MONTH и т. Д.

Например, calendar.get(1) совпадает с calendar.get(Calendar.YEAR) и т. Д.

2 голосов
/ 07 июля 2011

Я не вижу, в чем проблема. документация гласит, что вы получаете конкретные значения для любого предоставленного вами идентификатора поля.

Обычно вы используете константы поля для получения определенных значений (например, DAY_OF_MONTH или MONTH, но любое целое число будет работать, если оно находится в диапазоне 0..FIELD_COUNT.

Идентификаторы полей задокументированы здесь (хотя это может измениться в будущем), поэтому ваши конкретные значения:

ID  Value  Description
--  -----  -----------
 0      1  Era (BC/AD for Gregorian).
 1   2011  Year.
 2      6  Month (zero-based).
 3     28  Week-of-year.
 4      2  Week-of-month.
 5      6  Date/day-of-month.
 6    187  Day-of-year.
 7      4  Day-of-week.
 8      1  Day-of-week-in-month.
 9      1  AM/PM selector.
10     10  Hour.

Это July 6, 2011 AD, где-то между 10:00:00 PM и 10:59:59 PM включительно. Значения минут и секунд - это идентификаторы полей 12 и 13, и ваш код их не распечатывает, поэтому существует неопределенность во времени.

1 голос
/ 07 июля 2011

API, предоставляемый java.util.Calendar, не очень хорошо разработан, как показывает ваше заблуждение.Однако взгляните на JavaDoc для get () .Значение int предназначено для представления поля, значение которого вы хотите получить.См. Все элементы, перечисленные в том JavaDoc, который описан как «Номер поля ...», такой как YEAR.Так что calendar.get(Calendar.YEAR) будет равно 2011.

0 голосов
/ 07 июля 2011

Класс Calendar является излишним для многих распространенных сценариев, связанных с датой.История выглядит следующим образом: было обнаружено, что класс Date имеет много недостатков в манипулировании объектами даты.Отсюда и появился класс Calendar.Однако класс Calendar оказался слишком сложным решением для многих распространенных сценариев, связанных с датами.

Ознакомьтесь с Javadoc для лучшего понимания класса Calendar.

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