2012-05-14 6 views
2

Я хочу рассчитать разницу между двумя датами. В настоящее время я делаю:Расчет разницы дат в Java

Calendar firstDate = Calendar.getInstance(); 
firstDate.set(Calendar.DATE, 15); 
firstDate.set(Calendar.MONTH, 4); 
firstDate.get(Calendar.YEAR); 

int diff = (new Date().getTime - firstDate.getTime)/(1000 * 60 * 60 * 24) 

Это дает мне выход 0. Но я хочу, что я должен получить на выходе 0, когда новый Date() 15. В настоящее время новая дата 14. Это делает мою далее неправильный расчет, и я смущен, как это разрешить. Пожалуйста, предложите.

ответ

3

найти разницу между двумя датами не так просто, как вычитания двух дат и деления результата на (24 * 60 * 60 * 1000). Infact, его ошибочный!

/* Using Calendar - THE CORRECT (& Faster) WAY**/ 
//assert: startDate must be before endDate 
public static long daysBetween(final Calendar startDate, final Calendar endDate) { 
int MILLIS_IN_DAY = 1000 * 60 * 60 * 24; 
long endInstant = endDate.getTimeInMillis(); 
int presumedDays = (int) ((endInstant - startDate.getTimeInMillis())/MILLIS_IN_DAY); 
Calendar cursor = (Calendar) startDate.clone(); 
cursor.add(Calendar.DAY_OF_YEAR, presumedDays); 
long instant = cursor.getTimeInMillis(); 
if (instant == endInstant) 
    return presumedDays; 
final int step = instant < endInstant ? 1 : -1; 
do { 
    cursor.add(Calendar.DAY_OF_MONTH, step); 
    presumedDays += step; 
} while (cursor.getTimeInMillis() != endInstant); 
return presumedDays; 
} 

Вы можете прочитать больше об этом here.

+0

thnx пример, который вы приложили, помог мне рассчитать разницу. – Mohit224

+0

Без проблем @ Mohit224. Несколько дней назад вышло в аналогичную ситуацию. – pacman

1

Я не думаю, что за счет создания нового Date() даст вам текущее время и дату, а не делать это:

Calendar cal = Calendar.getInstance(); 
Date currentDate = cal.getTime(); 
Date firstDate = new Date(); 
firstDate.setHour(...); 
firstDate.setMinute(...); 
firstDate.setSeconds(...); 

long dif = currentDate.getTime() - firstDate.getTime(); 

Так как вы можете видеть, вы можете быть столь же просто, как вычитание одного из другой ...

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