Это дата в феврале или марте?Cal.set (2010, 1, 10) - PullRequest
2 голосов
/ 31 октября 2010

Я установил этот календарь в своем приложении:

Calendar cal = Calendar.getInstance();
cal.set(2010, 1, 10); 

Я использую это SimpleDateFormat, чтобы получить месяц как слово:

SimpleDateFormat formatMonth = new SimpleDateFormat("MM");

В одном классе этовыходит как February 10th, 2010.

В другом это выглядит как March 10th, 2010.

Что правильно?

Ответы [ 3 ]

7 голосов
/ 31 октября 2010

Аргумент month для Calendar.set () начинается с нуля, поэтому 1 означает February.Первое поведение правильное.

Я подозреваю, что что-то в вашем другом классе по ошибке пытается компенсировать нулевые индексы месяца, что приводит к ошибке off-by-one .

3 голосов
/ 31 октября 2010

У календарного класса есть константы по месяцам

 Calendar.JANUARY

например. Вы должны использовать их.

1 голос
/ 31 октября 2010

Учитывая все трудности, связанные с обработкой даты JDK, вы действительно должны использовать время Joda вместо . Приведенный выше код будет переписан как

DateTime dt = new DateTime().withDate(2010,2,10).withTime(12,13,14,0);

и представляет 10 февраля 2010 года в 12: 13: 14.000 в UTC. Нет двусмысленности, многопоточность и неизменность.

Обратите внимание, что SimpleDateFormat не является потокобезопасным.

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