Мне нужен метод, который возвращает разницу в днях между текущим днем и любой другой датой, у меня есть следующее:
private long getDays(Date dateOp) {
Calendar feCurrent=Calendar.getInstance();
feCurrent.set(Calendar.HOUR_OF_DAY, 0);
feCurrent.set(Calendar.MINUTE, 0);
feCurrent.set(Calendar.SECOND, 0);
Calendar feAna=Calendar.getInstance();
feAna.setTime(dateOp);
feAna.set(Calendar.HOUR_OF_DAY, 0);
feAna.set(Calendar.MINUTE, 0);
feAna.set(Calendar.SECOND, 0);
feAna.getTime());
long timeDiff = Math.abs(feAna.getTime().getTime() - feCurrent.getTime().getTime());
return TimeUnit.MILLISECONDS.toDays(timeDiff);
}
Дело в том, что я всегда получаю на один день меньше, например, если дата в качестве параметра - 16 октября 2017 года, результат будет 3, но на самом деле их четыре, я отлаживал, и timeDiff для этих дат составляет 345599395, при преобразовании в дни составляет 3,999 ....
Кто-нибудь знает, почему не работает.
Кстати, дата в качестве параметра загружается из базы данных, потому что, если я попробовал с основным параметром, обе даты работают.
0
для обоих экземпляров календаря.cal.set(Calendar.MILLISECOND, 0)
- person Titus   schedule 12.10.2017Calendar
иDate
, которые являются частью старого API дат, теперь унаследованы. Вместо этого используйте классы нового API внутри пакетаjava.time
. - person Zabuzard   schedule 12.10.2017LocalDate
работает нормально. Но если вы хотите учитывать время дня и летнее время, в возможном дубликате, который я связал, есть множество вариантов - особенно this сZonedDateTime
- person   schedule 13.10.2017