ОБНОВЛЕНИЕ: Первоначальный ответ от 2013 года теперь устарел, потому что некоторые классы были заменены. Новый способ сделать это - использовать новые java.time классы.
DateTimeFormatterdtf= DateTimeFormatter.ofPattern("dd MM yyyy"); StringinputString1="23 01 1997"; StringinputString2="27 04 1997";
РЕДАКТИРОВАТЬ: Поскольку были некоторые обсуждения относительно корректности этого кода: он действительно учитывает високосные годы. Однако TimeUnit.DAYS.convert функция теряет точность, поскольку миллисекунды преобразуются в дни (смотрите Связанный документ для получения дополнительной информации). Если это проблема, diff также можно преобразовать вручную:
floatdays= (diff / (1000*60*60*24));
Обратите внимание, что это float значение, не обязательно int.
Ну, вы могли бы сделать это как метод более простым способом:
publicstaticlongbetweenDates(Date firstDate, Date secondDate)throws IOException { return ChronoUnit.DAYS.between(firstDate.toInstant(), secondDate.toInstant()); }
Ответ 4
Большинство / все ответы вызвали у нас проблемы с переходом на летнее время. Вот наше рабочее решение для всех дат, без использования JodaTime. В нем используются объекты календаря.:
while (dayOne.get(Calendar.YEAR) > dayTwo.get(Calendar.YEAR)) { dayOne.add(Calendar.YEAR, -1); // getActualMaximum() important for leap years extraDays += dayOne.getActualMaximum(Calendar.DAY_OF_YEAR); }