2013-10-10 3 views
0

Я использую следующий код, но получаю минус значения, которое не должно быть! ..Получения отрицательного значения по функции каландра в Java (Android)

Calendar calendar = Calendar.getInstance(); 
calendar.clear(); 
calendar.set(2013, 10, 31, 23, 00); 

ctim=calendar.getTimeInMillis();//system time at shut down 


calendar.clear(); 
calendar.set(2013, 11, 1, 1, 00); 
long cTime = calendar.getTimeInMillis();//system time at restart 
timediff = cTime-ctim; 

Я не знаю, что это неправильно в нем .. ?? !!

ответ

3

В этом проблема. Месяцы в Java представлены от 0-11, а не от 1 до 12. Javadocs for the Calendar.MONTH говорят:

Номер поля для получения и установки с указанием месяца. Это значение, соответствующее календарю. Первый месяц года в григорианском и юлианском календарях - ЯНВАРЬ, который равен 0; последнее зависит от количества месяцев в году.

Так первый в intrepreted, как 31 ноября или 1 декабря (Calendar s является «мягким» по умолчанию), потому что ноябрь в течение 30 дней. Вторая дата также интерпретируется как 1 декабря.

Так два раза, когда печатается с SimpleDateFormat из "yyyy-MM-dd HH:mm:ss", являются:

2013-12-01 23:00:00 
2013-12-01 01:00:00 

Это разница отрицательных 22 часов, что соответствует -79200000 миллисекунд вы получаете.

Вычесть 1 от месяца вы ввода:

calendar.set(2013, 9, 31, 23, 00); // 9 here is October 

и

calendar.set(2013, 10, 1, 1, 00); // 10 here is November 

и вы получите положительную разницу.

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