Разбор дат и времени самостоятельно - плохая идея, как и использование встроенной функциональности Java.
Я не могу точно сказать, что вы хотите сделать или что не так, но я думаю, что можно с уверенностью сказать, что использование Joda Time было бы хорошей идеей.
Тогда вместо использования get
с мистическими константами - и корректировки на месяцы, основанные на 0 - вы можете просто использовать ReadableDateTime.getMonthOfYear()
или какой-либо другой метод с приятным названием. Гораздо приятнее.
Например, чтобы получить текущий месяц, вы должны использовать:
int currentMonth = new DateTime().getMonthOfYear();
Использует систему календаря ISO и текущий часовой пояс по умолчанию. Лично я не слишком люблю дефолтный часовой пояс, поэтому вы можете захотеть:
int currentMonth = new DateTime(DateTimeZone.UTC).getMonthOfYear();
Я подозреваю, что система календаря ISO будет в порядке для вас, хотя:)
(Как говорит ChssPly76, cal.get(Calendar.MONTH)
даст вам номер месяца на основе 0 с вашим текущим кодом, но, на мой взгляд, это ужасный API.)
РЕДАКТИРОВАТЬ: Теперь вы обновили свой вопрос, вы должны диагностировать проблему, разбив ее немного больше. Это проблема с точки зрения ввода пользователя или сравнения с текущим месяцем? Если проблема связана с битом «сравнение с текущим месяцем», это легко показать в короткой, но полной программе, в которой нет всего остального: «1024 *
import java.util.*;
public class Test
{
public static void main(String[] args)
{
// It's currently November
int userInput = 11;
Calendar cal = Calendar.getInstance();
int currentMonth = cal.get(Calendar.MONTH) + 1;
if (userInput == currentMonth)
{
System.out.println("Yes, that's the current month");
}
else
{
System.out.println("No, the current month is " + currentMonth);
}
}
}
Я компенсировал java.util.Calendar
, используя 0 месяцев, добавляя один к возвращенному значению, а не вычитая один из пользовательского ввода, но это та же основная предпосылка.
Теперь, если проблема заключается в вводе данных пользователем, вам не нужно беспокоиться о текущем месяце - просто проверьте, получаете ли вы то, что ожидаете.
Большая часть программирования делит проблему на две части. Здесь у вас есть две проблемы:
- Разбор пользовательского ввода
- Сравнение с текущим месяцем
Уточните, в чём проблема, и отредактируйте свой вопрос по адресу , только этот аспект .