Ошибка в календаре Java / дате 2 октября 2010 г.?

Я не уверен, что делаю не так, но я ' У нас есть фрагмент кода, который вычисляет количество дней между двумя датами и выглядит примерно так:

final Calendar first = new GregorianCalendar(2010, Calendar.OCTOBER, 1);
final Calendar last = new GregorianCalendar(2010, Calendar.NOVEMBER, 1);

final long difference = last.getTimeInMillis() - first.getTimeInMillis();
final long days = difference / (1000 * 60 * 60 * 24);

System.out.println("difference: " + difference);
System.out.println("days: " + days);

Подводя итог, приведенный выше блок кода вычисляет количество дней между 1 октября 2010 г. и 1 ноября 2010 г. I ' Я ожидаю, что он вернется через 31 день (поскольку в октябре 31 день)

difference: xxxx
days: 31

, но вместо этого он показывает 30 дней в октябре!

difference: 2674800000
days: 30

Мне удалось сузить его до дат 2 октября 2010 г. и дат 3 Октябрь 2010 года, в котором, кажется, всего 82800000 миллисекунд вместо полных 86400000 миллисекунд (отсутствует ровно один час).

Есть ли у кого-нибудь идеи, что я? м делаю не так? Или 2 октября - это особая дата, которая на одну минуту меньше обычного дня?

8
задан jklp 19 December 2010 в 09:10
поделиться