2014-01-19 3 views
1

Я написал код нижеКалендарь Java. После того, как функция не возвращает ожидаемый результат

Calendar now = Calendar.getInstance(); 
Calendar expiry = Calendar.getInstance(); 
expiry.set(2014, 1, 15, 0, 0); 
now.after(expiry); 

это дает мне ложь, сегодня девятнадцатом она должна дать истинную

я упускаю что-нибудь?

+0

лучше использовать предоставленные константы классом календаря. как @ peter.petrov указал, что 1 фактически означает ФЕВРАЛЬ. 'expiry.set (2014, Calendar.JANUARY, 15, 0, 0)' в этом случае. [см. здесь] (http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html) – kmera

ответ

2

(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) не обязательно будет возвращать значение, установленное по вызову
Метод набора после полей календаря был пересчитан.
Специфика определяется конкретным классом календаря.

+0

Спасибо. +1 к вам. –

+0

getTime() не требуется, вы можете проверить его достаточно легко, чтобы быть уверенным. –

+0

@TimB OK ... Ну, я знаю это, но я не хочу, чтобы подтвердить это только определенным тестом, вы знаете. Я имею в виду, что я не уверен, что метод set, который использует OP, имеет ту же самую характеристику, которая установлена ​​(f, value). Если это так, то getTime() необходимо, я думаю. Я сам не уверен. –

Смежные вопросы