Вопрос

У меня проблемы с календарем Java. Я анализирую некоторые данные из файла TXT, и мне нужно создать дату. После завершения следующего кода:

tmpYear = Double.parseDouble(row[yearIndex]);
tmpMonth = Double.parseDouble(row[monthIndex]);
tmpDay = Double.parseDouble(row[dayIndex]);
if(timeIndex != -1)
    tmpTime = Double.parseDouble(row[timeIndex]);
if(secondsIndex != -1)
    tmpSeconds = Double.parseDouble(row[secondsIndex]);

Я могу отлаживать и видеть, что переменные следующие: tmpyear == 2010
tmpmonth == 12
tmpday == 30
tmptime == 15 (это час дня)
Tmpseconds == 0

Но при запуске следующего кода:

cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
            (int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());

Я получаю это для вывода:
Солнце 30 января 15:00:00 CST 2011

Может ли кто -нибудь объяснить, какая возможная причина этого будет? Спасибо всем заранее за помощь!

Это было полезно?

Решение

Месяцы индексируются 0-11 вместо 1-12.
0 = январь
1 = февраль
...
11 = декабрь
Использовать tmpMonth = value -1 вместо.

Другие советы

Я полагаю, что стоимость месяца начинается с 0, а не 1, поэтому она интерпретирует 0 как январь, 1 февраля ... а затем ян снова как 12.

От API:

Месяц - стоимость, используемая для установки месяца поля времени. Месяц стоимость 0 на основе 0. Например, 0 за январь.

Когда вы устанавливаете поле календаря. {Январь = 0 ... декабрь = 11}

Причина довольно проста: дизайн неисправности в API календаря. Вот почему JSR 310 находится на пути, чтобы улучшить поддержку Java для дат.

Технически, авторы класса думали, что было бы хорошо использовать только статические поля. Итак, вам нужно использовать следующее:

calendar = ...
calendar.setMonth(Calendar.JANUARY);

Они не думали, что людям могут понадобиться динамические настройки в календаре, как вам нужно (и большинство из нас, в то же время).

Значения месяца составляют с 0 (январь) до 11 (декабрь). Попробуйте использовать ((int) tmpmonth) - 1 при установке месяца для получения декабря.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top