Причина этой проблемы уже упоминалась в Ответ Андреаса .
Вопрос: что именно вы точно хотите посчитать. Тот факт, что вы утверждаете, что фактическая разница должна составлять 29 вместо 28, и спрашиваете, может ли «время местоположения / зона быть проблемой» , показывает, что вы на самом деле хотите считать. По-видимому, вы хотите избавиться от любой разницы часовых поясов.
Я предполагаю, что вы хотите рассчитывать только дни без времени и часового пояса.
Java 8
Ниже в примере того, как правильно рассчитать количество дней между ними, я использую класс, который представляет именно это - дату без времени и часового пояса - LocalDate
.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MM-yyyy HH:mm:ss");
LocalDate start = LocalDate.parse("1-03-2020 00:00:00", formatter);
LocalDate end = LocalDate.parse("30-03-2020 00:00:00", formatter);
long daysBetween = ChronoUnit.DAYS.between(start, end);
Обратите внимание, что для ChronoUnit
, DateTimeFormatter
и LocalDate
требуется не менее Java 8, что вам недоступно, согласно тегу java -7 . Тем не менее, это возможно для будущих читателей.
Как уже упоминал Оле В.В., есть также ThreeTen Backport , который ретранслирует Java 8 Date and Time API к Java 6 и 7.