I mentioned that one of the method in the production project work wrong with dates, but i can't just replace it, because it is in production for a long time. I've created a new method, that works correct, but i can't figure out why the first method work wrong.
Old method (that works wrong):
public static Integer getNumberOfDays(Date startDate, Date endDate) {
    TimeZone.setDefault((TimeZone.getTimeZone("Europe/Moscow")));
    startDate.setHours(00);
    startDate.setMinutes(00);
    startDate.setSeconds(00);
    endDate.setHours(23);
    endDate.setMinutes(59);
    endDate.setSeconds(59);
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(startDate);
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(endDate);
    Calendar date = (Calendar) cal1.clone();
    int daysBetween = 0;
    while (date.before(cal2)){
        date.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween++;
    }
    return daysBetween;
}
New method:
public static Integer getNumberOfDaysSecondVersion(Date startDate, Date endDate) {
    long difference = startDate.getTime() - endDate.getTime();
    float daysBetween = (difference / (1000*60*60*24));
    return (int) daysBetween > 0 ? (int) daysBetween : 0;
}
Here is how i call both:
DateFormat formated = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(Calculation.getNumberOfDays(
            formated.parse("2018-06-14"),
            formated.parse("2018-06-06")
    ));
    System.out.println(Calculation.getNumberOfDaysSecondVersion(
            format.parse("2018-06-14"),
            format.parse("2018-06-06"))
    );
Output:
0
8
Please help.
 
     
     
     
    