(1) Месяц 1 - февраль, а не январь, как вы думали. Месяц 0 - январь.
(2) Кроме того, я бы назвал getTime() прямо перед вызовом после() только для того, чтобы быть в безопасности.
Calendar now = Calendar.getInstance();
Calendar expiry = Calendar.getInstance();
expiry.set(2014, 0, 15, 0, 0);
expiry.getTime();
now.after(expiry);
Не уверен, что если здесь требуется строгое обращение к getTime(), это необходимо.
Я имею в виду эту часть JavaDoc.
set (f, value) изменение календарного поля f значение. Кроме того, он устанавливает переменную внутреннего члена
, чтобы указать, что поле календаря f было изменено.
Хотя поле календаря f изменяется немедленно, значение времени календаря
в миллисекундах не пересчитывается до следующего вызова get(), getTime(),
getTimeInMillis(), add() или roll(). Таким образом, множественные вызовы set()
не запускают несколько ненужных вычислений. В результате изменения
поле календаря с использованием set() может также измениться и другие поля календаря, в зависимости от
в поле календаря, значении поля календаря и системе календаря.
Кроме того, get (f) не обязательно будет возвращать значение, установленное по вызову
Метод набора после полей календаря был пересчитан.
Специфика определяется конкретным классом календаря.
лучше использовать предоставленные константы классом календаря. как @ peter.petrov указал, что 1 фактически означает ФЕВРАЛЬ. 'expiry.set (2014, Calendar.JANUARY, 15, 0, 0)' в этом случае. [см. здесь] (http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html) – kmera