Time Zone
correct answer by David Wallace объясняет, что Daylight Saving Time или другие аномалии влияет на результаты вашего кода. Опора на часовые пояса по умолчанию (или прямое игнорирование часовых поясов) приведет вас к таким неприятностям.
Сделать Span Inclusive-Exclusive
Кроме того, правильный способ определить промежуток времени, чтобы сделать начало включительно и заканчивая эксклюзивной. Так что, если вы хотите месяц марта, вам нужно перейти с первого момента первого дня до первого момента первого дня после Март (1 апреля).
Для подробного обсуждения этой идеи см. Мои другие ответы, такие как this one и this one.
Вот схема моего подняли из других ответов:
Joda времени
Классы java.util.Date/Calendar в комплекте с Java, как известно, хлопотное. Избежать их. Используйте Joda-Time или Java 8, новый пакет java.time. * (Вдохновленный Joda-Time).
Библиотека Joda-Time 2.3 предоставляет классы, посвященные периодам времени: период, продолжительность и интервал. В этой библиотеке также есть некоторые полезные статические утилиты, такие как Days.daysBetween
.
Объекты DateDime Joda-Time знают свои собственные time zone, в отличие от java.util.Date/Calendar, которые, похоже, имеют часовой пояс, но нет.
// Specify a timezone rather than rely on default.
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris");
DateTime marchFirst = new DateTime(2013, DateTimeConstants.MARCH, 1, 0, 0, 0, timeZone);
DateTime aprilFirst = new DateTime(2013, DateTimeConstants.APRIL, 1, 0, 0, 0, timeZone);
int days = Days.daysBetween(marchFirst, aprilFirst).getDays();
самосвала утешать ...
System.out.println("marchFirst: " + marchFirst);
System.out.println("aprilFirst: " + aprilFirst); // Note the change in time zone offset in the output.
System.out.println("days: " + days);
При запуске, обратите внимание:
marchFirst: 2013-03-01T00:00:00.000+01:00
aprilFirst: 2013-04-01T00:00:00.000+02:00
days: 31
ли декретные либо начать или остановить во время первого из этих периодов? –
Вы действительно заинтересованы в первопричине этой проблемы или просто хотите найти надежный способ рассчитать разницу в днях между двумя датами? –
Я не уверен в вашем вопросе ... http: //ideone.com/n7ERlr .. Проверьте этот результат IDEone. –