Вы должны прочитать этот пост , чтобы лучше понять, как Календарь взаимосвязан с метками даты / времени.
Прочитав этот сайт, мои первые вопросы были:
Что вы подразумеваете под днями? Вы имеете в виду «24-часовые блоки» или календарные дни? В том же духе, вам небезразлично, если у вас мало времени из-за летнего времени и т. Д.?
Если вы имеете в виду календарные дни, вам лучше всего:
final Calendar first = new GregorianCalendar(2010, 9, 1);
final Calendar last = new GregorianCalendar(2010, 10, 1);
Calendar difference = Calendar.getInstance();
difference.setTimeInMillis(last.getTimeInMillis() - first.getTimeInMillis());
int numDays = difference.get(Calendar.DAY_OF_YEAR) - difference.getMinimum(Calendar.DAY_OF_YEAR);
Конечно, приведенный выше код будет работать только в том случае, если количество дней <365. Вам нужно будет создать скользящий расчет, например, </p>
int yearDiff = last.get(Calendar.YEAR) - first.get(Calendar.YEAR);
Calendar tmp = new GregorianCalendar();
tmp.setTimeInMillis(first.getTimeInMillis());
for(int i = 0; i < yearDiff; i++) {
numDays += tmp.getActualMaximum(Calendar.DAY_OF_YEAR);
i++;
tmp.add(Calendar.YEAR, 1);
}
Это должно позволить вам правильно и последовательно определить количество дней, не беспокоясь о переходе на летнее время, високосных годах и т. Д.
Тем не менее, JodaTime, вероятно, имеет встроенную функциональность.