Period.getDays() возвращает каждый раз 0 в android

Я пытаюсь получить правильную разницу во времени между текущим и вторым выбранным днем ​​из календаря. В этом случае я использую LocalDate и 3 метода getDays() getMonths() getYears(), чтобы получить день и месяц, а также год:

public int dateDiff(int year,int month,int day) {
    final int Day = c.get(Calendar.DAY_OF_MONTH);
    final int Month = c.get(Calendar.MONTH);
    final int Year = c.get(Calendar.YEAR);
    LocalDate localDate1 = LocalDate.of(year,month,day);
    LocalDate localDate2 = LocalDate.of(Year,Month,Day);

    Period period = Period.between(localDate2,localDate1);
    int dayDiff = period.getDays();

    return dayDiff;
}

public void onSelectedDayChange(@NonNull CalendarView view, final int year, final int month, final int dayOfMonth) {
    textView.setText(""+dateDiff(year, month, day));
}

Но каждый раз, когда я тестирую код, который я получил в textView «0», я пытаюсь увидеть значение переменной «период», и я получаю (P2M8D «этот результат получен в моем примере»), это означает, что период переменной подсчитывает разницу между днями и проблема в методах. Как я могу решить эту проблему?


person Mohamed Amine Sekmani    schedule 25.04.2020    source источник
comment
Включите отладчик и проверьте значения приятеля.   -  person Vucko    schedule 25.04.2020
comment
Я предлагаю вам не использовать класс Calendar, так как он устарел. У вас уже есть доступ к Java 8 Date and Time API (в пакете java.time), поэтому вам следует использовать их.   -  person MC Emperor    schedule 25.04.2020
comment
Я использую Calendar, потому что мне нужен календарь в моем проекте. Пользователь нажимает на нужную дату и пишет событие   -  person Mohamed Amine Sekmani    schedule 25.04.2020
comment
Можете ли вы заменить текущую логику даты на LocalDate.now() и попробовать.   -  person Aviral Verma    schedule 26.04.2020
comment
period.getDays(), вероятно, не то, что вам нужно, используйте ChronoUnit.DAYS.between см. stackoverflow.com/questions/30833582/. Вы все равно не должны получить 0. В коде есть еще одна проблема, которую вы нам не показали.   -  person Oleg    schedule 26.04.2020
comment
Спасибо всем за помощь, я решил проблему, когда я изменил имя переменных, ну, в моем проекте я назвал текущее время по дням, месяцам, годам и выбранное время по дням, месяцам, годам, поэтому заглавная буква в имени переменных сделал проект некоторые проблемы.   -  person Mohamed Amine Sekmani    schedule 26.04.2020
comment
Вы не должны начинать имена переменных с большой буквы. Вместо этого следуйте соглашениям об именах Java: имена переменных и имена методов всегда должны быть написаны в camelCase.   -  person MC Emperor    schedule 26.04.2020


Ответы (2)


Проблема в этом проекте заключается в названии переменных, я использую одно и то же имя текущего времени и выбранного времени, я просто меняю первую букву на заглавную, но это создает проблему. Вот почему каждый раз, когда я запускаю проект, я получаю 0, я меняю программу следующим образом:

public int dateDiff(int year,int month,int day) {
final int dayOfToday = c.get(Calendar.DAY_OF_MONTH);
final int monthOfToday = c.get(Calendar.MONTH);
final int yearOfToday = c.get(Calendar.YEAR);
LocalDate localDate1 = LocalDate.of(year,month,day);
LocalDate localDate2 = LocalDate.of(Year,Month,Day);

Period period = Period.between(localDate2,localDate1);
int dayDiff = period.getDays();

return dayDiff;
}
person Mohamed Amine Sekmani    schedule 26.04.2020

Вот это должно помочь.

public int dateDiff(int year,int month,int day) {
  Calendar thatDay = Calendar.getInstance();
  thatDay.set(Calendar.DAY_OF_MONTH,day);
  thatDay.set(Calendar.MONTH,month); // 0-11 so 1 less
  thatDay.set(Calendar.YEAR, year);

  Calendar today = Calendar.getInstance();

  long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in millis
  long days = diff / (24 * 60 * 60 * 1000);
  return days;
}
person Amit Gupta    schedule 27.04.2020