Я попытался самостоятельно и обнаружил ошибку при получении времени в миллисекундах для экземпляра календаря текущего времени экземпляр.
Вы получили ошибку, потому что время в миллисекундах для CurrentTime не былоточный , он как-то глючил и представлял время на 1 месяц меньше текущего , поэтому вы получили отрицательный ответ.
Вы можете выполнить это нижеуказанным способом.
Calendar calCurr = Calendar.getInstance();
Log.i("Time in mili of Current - Normal", ""+calCurr.getTimeInMillis()); // see what it gives? dont know why?
Date date = new Date();
calCurr.set(date.getYear()+1900, date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());// so added one month to it
Log.i("Time in mili of Current - after update", ""+calCurr.getTimeInMillis()); // now get correct
Calendar start = Calendar.getInstance();
start.set(2012, 12, 1, 11, 28, 0);
Calendar end = Calendar.getInstance();
end.set(2012, 12, 1, 13, 28, 0);
if((start.compareTo(calCurr)==-1) && (calCurr.compareTo(end)==-1) && (start.compareTo(end)==-1))
{
double hrBetweenStartEnd = (end.getTimeInMillis()-start.getTimeInMillis())/3600000;
double hrBetweenStartCurr = (calCurr.getTimeInMillis()-start.getTimeInMillis())/3600000;
int percentage = (int) ((100*hrBetweenStartCurr)/hrBetweenStartEnd);
Log.i("Percentage", ""+percentage);
}